일반적인 class 만드는 법
일반적으로 class 만드는 법은 다음 코드를 참고할 것.
class CustomClass (SuperClass0, SuperClass1) : # class 정의 헤더. 클래스의 이름과 부모를 지정.
# class attributes
class_variable0 = None # class가 가지는 attribute를 assignment로 생성.
@classmethod # @classmethod 데코레이터를 통해 class method를 정의
def class_method(cls, *args): # class method 정의 (필요하지 않은 경우가 많음)
# 첫번째 파라메터 cls에 class method를 호출하는 class객체가 할당됨.
print(f'{cls.class_variable0=}')
# instance attributes
def __init__(self, *args):
# 생성자. 반드시 만들고, 여기서 instance attribute를 할당으로 추가함.
# self 는 생성되는 instance를 가르킴.
super().__init__() # 부모 클래스의 생성자는 거의 대부분 꼭 호출해줘야함.
self.instance_variable0 = None # instance attribute를 assignment로 생성.
self.instance_variable1 = None # instance attribute를 assignment로 생성.
def instance_method(self, *args): # instance method 정의.
print(type(self).class_variable0) # class variable에 접근 가능.
print(CustomClass.class_variable0) # class이름으로 class variable에 접근.
print(self.instance_variable0) # instance variable에 접근 가능.
# static attributes
@staticmethod # @staticmethod 데코레이터를 통해 static method를 정의
def static_method(): # static method 정의 (필요하지 않은 경우가 많음)
# instance의 variable을 바꾸지 않는 pure function 만드는데 사용됨.
# class method로 거의 대부분 대처 가능하므로 많이 사용되지 않음.
print(CustomClass.class_variable0) # class이름으로 class variable에 접근.
- 모든 instance들이 공유해야하는 변수가 존재한다면, class attribute로 만들 것.
- 해당 class attribute에만 접근하는 어떤 처리가 필요하고,
굳이 instance의 상태에 상관없을 경우 class methods로 만들 것. - class attributes나 instance attributes 모두 동적으로 추가가능하지만,
위의 예제처럼 추가하는 것을 권함 (동적 속성 추가는 피하는게 좋음).
참고자료
동적 속성 추가관련 자료.
https://dsaint31.me/mkdocs_site/python/oop/oop_3_01_python_class/#class-attribute
instance methods, class methods and static methods 에 대한 자료.
2023.08.20 - [Python] - [Python] instance methods, class methods, and static methods
decorator에 대한 자료
2023.08.18 - [Python] - [Python] Decorator
'Python' 카테고리의 다른 글
[DL] Dataset: Boston Housing Price (1) | 2024.04.18 |
---|---|
[Python] collections.abc (0) | 2024.04.15 |
[DL] Pandas 로 csv 읽기: read_csv (0) | 2024.04.13 |
[PyTorch] Custom Model 과 torch.nn.Module의 메서드들. (0) | 2024.04.12 |
[PyTorch] CustomANN Example: From Celsius to Fahrenheit (0) | 2024.04.12 |