클래스 #
클래스(class)는 각각의 개념화된 사물들을 객체화(object) 할 수 있고 이러한 객체들이 속성을 공유하는 방식을 지칭한다. 클래스 또한 함수와 같이 재사용성에 있어서 효과적이고, 유지보수에 유용하다. 클래스는 아래의 특징을 가진다.
- 상속(inheritace) : 상위의 개념과 하위의 개념간에 개념을 상속해주고 계승하는것을 의미한다. 상위의 개념은 superclass, 하위의 개념은 subclass라고 칭한다. e.x. 포유류(superclass) 고양이, 삵(subclass)
- 다양성(polymorphism) : 하위의 개념들이 상위의 개념에서 받은 개념 이외에 다양성을 가지는 것을 의미한다. e.x. 상위 개념(짖는다) 하위개념 (왈왈, 짹짹)
- 추상화(abstraction) : 클래스의 내부를 보지 않아도 내부의 변수와 같은것들을 보지 않아도 알수 있는것을 의미한다.
- 은닉화(encapsulation) : 클래스 내부에 변수(class variable) 기능(class method)을 가지게 되는것을 의미한다.
클래스가 사용하는 메서드는 다음과 같이 나눠질 수 있다.
- 인스턴스 메서드 : 첫번째 파라미터로 self를 가진다.
- 클래스 메서드 : 클래스의 속성에 접근하는것으로 cls파라미터 사용
- 정적 메서드 : 메서드가 인스턴스와 독립적으로 사용될때 사용
- 매직 메서드 :
- 클래스는 생성자(constructor)(init)를 이용하여 기본형을 정의한다.
- (str)은 문자열화를 하여 서로 다른 객체 간의 정보를 전달하는 데 사용된다.
- (repr)은 인간이 이해할 수 있는 표현으로 나타내기 위한 것입니다.
우선 순위는 __str__이 __repr__보다 높다.- 추상 메서드 : 자식 class에서 필수적으로 구현해야하는 것을 지정
각각의 매서드들은 아래와 같이 사용이된다.
class <class_name>(<superclass>):
data0 = 0
def __init__(self, data1, data2):
self.data1 = data1
...
def instance_method1(self, data3, data4): # 인스턴스
action
return 0
@classmethod
def class_method1(cls): # 클래스
print(f"{cls.data0}")
@staticmethod
def static_method1(<input>): # 정적
return <output>
def __str__(self) -> str: # 매직
return f""
def __repr__(self) -> str:
return f""
@abstractmethod
def abstract_method1(self): # 추상
pass
클래스의 속성은 다음과 같이 구분을 할 수 있다.
- 각 객체의 속성
class <class_name>():
def __init__(self, data1):
self.data1 = data1 # 각 객체의 속성
- 모든 객체가 공유하는 속성
class <class_name>():
data0 = 0
def __init__(self, data1):
self.data1 = data1
<class_name>.data0 += 1 # 모든 객체가 공유하는 속성
- 클래스 내부에서만 접근 가능한 속성(네임 맹글링(name mangling) 을 이용하여 변경은 가능)
class <class_name>():
def __init__(self, data1):
self.__data1 = data1 # 불변 속성
._<class_name>__data1 = "x" # 네임 맹글링 하는법
docstring은 모듈, 함수, 클래스 또는 메소드 정의의 첫 번째에 오는 문자열으로 해당 객체의 doc 속성으로 사용됨.
class <class_name>():
"""
문서화 자료 입력
"""
def __init__(self, data1):