728x90
1. 스페셜 메소드
* 프로그래머가 이름을 직접 명시하여 호출하지 않더라도 상황에 따라 자동으로 호출되는 메소드이며 __name__ 과 같은 형태를 띈다.
스페셜 메소드 | 내용 | 예시 |
__init__ | 객체 생성 시 자동으로 호출되며, 클래스의 변수를 초기화 하는 생성자 역할 | class Car: def __init__(self, number): self.number = number |
__len__ | len 함수가 호출될 때 호출됨 | len(t) # t.__len__() |
__iter__ | iter 함수가 호출될 때 호출됨 | itr = iter(t) # itr = t.__iter__() |
__str__ | str 함수가 호출될 때 호출됨 #문자열을 반환하는 메소드가 필요할 때 오버로딩해 사용 |
s = str(t) # s = t.__str__() |
__call__ | 객체 뒤에 ()를 붙히면 호출됨 #__call__을 오버로딩한다면 객체를 함수처럼 사용가능 |
acnt() # acnt.__call__() |
__add__ | + 연산할 때 호출됨 | acnt + 100 # acnt.__add__(100) |
__iadd__ | += 연산할 때 호출됨 | |
__sub__ | - 연산할 때 호출됨 | acnt - 100 # acnt.__sub__(100) |
__isub__ | -= 연산할 때 호출됨 |
# 오버라이딩으로 구현해 본 iterator 객체
class Sample:
def __init__(self, d):
self.ds = d
def __iter__(self):
self.cc = 0
print("iter")
return self
def __next__(self):
if len(self.ds) <= self.cc:
raise StopIteration
self.cc += 1
return self.ds[self.cc - 1]
def main():
sp = Sample([1, 2, 3, 4, 5])
ltr_sp = iter(sp)
print(next(ltr_sp)) # iter 1
main()
# 연산자 오버로딩
class OverSpcial:
def __init__(self, n):
self.n = n
def __add__(self, param):
print("__add__호출")
return OverSpcial(self.n + param.n)
def __iadd__(self, param):
print("__iadd__호출")
self.n += param.n
return self
def __call__(self):
return '__call__ 호출 : {}'.format(self.n)
def __str__(self):
return "__str__ 호출 : {}".format(self.n)
def main():
os1 = OverSpcial(7)
os2 = OverSpcial(3)
result1 = os1 + os2 # __add__호출
print(result1) # __str__ 호출 : 10
os1 += os2 # __iadd__호출
print(os1) # __str__ 호출 : 10
print(os2()) # __call__ 호출 : 3
print(os2) # __str__ 호출 : 3
main()
728x90
'# Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 정리(14)_dict가 주는 메모리 부담 해결하는 __slots__ (0) | 2021.07.31 |
---|---|
[Python] 파이썬 정리(13)_정보은닉/__dict__ (0) | 2021.07.31 |
[Python] 파이썬 정리(11)_Object 클래스에 있는 메소드 (0) | 2021.07.31 |
[Python] 파이썬 정리(10)_상속 (0) | 2021.07.31 |
[Python] 파이썬 정리(9)_파이썬에서 클래스와 객체 (0) | 2021.07.31 |