🔗객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 - 코드스테이츠
🔗인스턴스 메서드 / 정적 메서드 / 클래스 메서드 - 딸기맛도나쓰
💡인스턴스를 통해 클래스 변수 및 메서드에 접근하는 것을 지양해라
__로 시작하여 __로 끝나는 메서드를 지칭한다.__init__: 인스턴스 생성 시 자동 호출 (생성자)__del__: 인스턴스 삭제 시 자동 호출 (소멸자)__call__: 인스턴스 명에 괄호를 붙여 호출💡함수도 클래스다.
class MyFunc:
def __call__ (self):
print("클래스 선언을 통한 함수 정의")
def my_func():
print("def 키워드와 함께 함수 정의")
if __name__ == '__main__':
my_func() # 일반적인 함수 호출
my_func.__call__() # __call__ 메서드를 직접 호출
my_func_instance = MyFunc() # 인스턴스 생성
my_func_instance() # 인스턴스를 호출하여 __call__ 메서드 실행
실행하면 두 번의 def 키워드와 함께 함수 정의와 클래스 선언을 통한 함수 정의가 출력되는 것을 확인할 수 있다.
🔗파이썬 연산자 오버로딩과 우선순위 - 한재민
🔗operator — Standard operators as functions
int, float도 결국 클래스이며 +, - 등 연산자에 대응되는 메서드가 정의되어 있다.__add__, __sub__, __mul__, __truediv__가 사칙연산에 대응된다.__eq__, __ne__는 ==, !=에 대응되며, 하나만 정의해도 다른 것은 negation한 결과를 반환한다.getter&setter를 간결하게 작성할 수 있는 데코레이터이다.class MyClass:
def __init__(self):
self._value = 0 # 접근 지양 -> 메서드를 통해 접근
@property
def value(self):
return self._value
@value.setter
def value(self, value):
if not isinstance(value, int):
raise ValueError("Value must be an integer")
self._value = value
@value.deleter
def value(self):
del self._value
if __name__ == "__main__":
my_instance = MyClass()
my_instance.value = 10 # setter 호출
print(my_instance.value) # getter 호출
del my_instance.value # deleter 호출
# getter 호출, 에러 발생
try:
print(my_instance.value)
except Exception as e:
print(e)
# setter 호출, 에러 발생
try:
my_instance.value = "Hello"
except Exception as e:
print(e)
_Class명_를 자동으로 붙여주는 기능이다.__를 메서드나 필드에 붙여주게 되는데, 이 때도 맹글링이 적용되어 접근 가능하다.