본문 바로가기
Computer & Program/python

[python] class(클래스) - 02

by TDRemon 2024. 2. 25.
반응형

안녕하세요. TDR입니다.

오늘은 1부에 이어 비공개, 정적 , 클래스 메소드에 대해서 간략히 정리해 보겠습니다.

 

[python] class(클래스) - 01

안녕하세요. TDR입니다. 이번에는 python에서 class를 어떻게 선언하고 어떤 식으로 사용하는지 간략히 정리해 보겠습니다. Default format class SomeClass: # 생성자 def __init__(self): pass def set_fruits(self, fruits)

tdremon.tistory.com

Private method(비공개 메소드)

class SomeClass:
  def __init__(self):
    pass
  
  def public_method(self):
    print('Public method!')
    self.__private_method()
  
  def __private_method(self):
    print('Private method!')
       
class_obj = SomeClass()

# Public method!
# Private method!
class_obj.public_method()

class_obj.__private_method()  # AttributeError

1부에서 살펴본 private attribute와 마찬가지로 class 내부의 함수 이름 앞에 __를 붙임으로 함수의 접근제한자를 private으로 설정할 수 있습니다. 그래서 위 예시와 같이 class 내부에서는 접근이 가능하지만 외부에서는 접근이 불가한 것을 볼 수 있습니다.

Static method(정적 메소드)

class SomeClass:
  def __init__(self):
    pass
  
  @staticmethod
  def static_method(a, b):
    return a * a + b
       
print(SomeClass.static_method(2, 4))  # 8

static 메소드를 선언할 때는 일반적인 함수와 다른 점이 몇군데 있습니다. 하나는 해당 함수에 @staticmethod라는 decorator가 붙는 다는 것입니다. 그리고 매개변수에 self가 없는 것을 볼 수 있습니다. 이는 static 메소드 자체가 인스턴스 자체에 영향을 주지 않는 함수이기 때문입니다. 다른 언어에서도 Calc.sum(a, b)과 같이 인스턴스 생성 없이 class에 구현된 정적 메소드를 사용하는 것을 많이 볼 수 있습니다.

Class method(클래스 메소드)

class SomeClass:
  __name = ''

  def __init__(self, name):
    SomeClass.__name = name
  
  @classmethod
  def class_method(cls):
    return cls.__name
  
  @classmethod
  def set_class_method(cls, name):
    cls.__name = name
    return cls.__name
       
instance01 = SomeClass('John')
print(SomeClass.class_method())  # John
instance02 = SomeClass('Mike')
print(SomeClass.class_method())  # Mike
SomeClass.set_class_method('Carry')
print(SomeClass.class_method())  # Carry

class 메소드는 static 메소드와 유사해 보이지만 구문의 차이, 사용 목적의 차이가 있습니다. static 메소드는 class의 상태와 무관하게 사용할 수 있는 반면, class 메소드는 class 내부의 attribute나 함수에 접근하고 이용, 수정할 수 있습니다.

그리고 @classmethod decorator가 붙은 함수의 매개변수를 잘 보시면 self가 아닌 cls라는 값이 있는 것을 볼 수 있습니다. class 메소드는 instance가 아닌 class 자체에 접근을 하는 것이기 때문에 그렇습니다. 그리고 __init__ 함수를 보면 클래스 자체의 __name 값에 생성자로 전달된 값을 넣고 있습니다. 이것도 좀 전에 설명한 것처럼 class 자체 영역의 __name을 수정한다는 것을 알 수 있습니다.

설명을 따로 안한 Decorator라는 것은 추후 정리를 하겠습니다.

다음 3부에서는 클래스 상속, 추상 클래스 등을 정리해 보겠습니다.

 

[python] class(클래스) - 03

안녕하세요. TDR입니다. 2부에 이서 클래스 상속, 추상 클래스에 대해서 간략히 정리해 보겠습니다. https://tdremon.tistory.com/entry/python-class-01 https://tdremon.tistory.com/entry/python-class-02 Class inheritance(클래

tdremon.tistory.com

 

반응형

'Computer & Program > python' 카테고리의 다른 글

[python] try-except (예외처리)  (0) 2024.02.27
[python] class(클래스) - 03  (0) 2024.02.26
[python] class(클래스) - 01  (0) 2024.02.24
[python] 지역변수 & 전역변수  (0) 2024.02.23
[python] function(함수) - 02  (0) 2024.02.22

댓글