728x90
1. __slots__
* '__dict__'의 이름으로 객체 하나당 하나씩 딕셔너리를 할당하는데, 많은 수의 객체를 생성해야 하는 경우에는 객체당 존재하는 '__dict__'가 시스템에 부담을 준다. 이런 부담을 줄이기 위해서 사용하는게 '__slot__' 를 사용한다.
* 객체 속성(변수를) 제한하고, 객체 당 '__dict__' 을 생성하지 않는다. 이때, 새로운 변수 추가하면 오류가 발생한다.
* 빈번하게 객체를 사용해야할 경우 사용하면 효율적임
# __dict__ 가 존재하는 객체
import timeit
class Score:
def __init__(self, name, java, c, py):
self.name = name
self.java = java
self.c = c
self.py = py
def __str__(self):
return '이름 : {0} / java : {1} / c : {2} / py : {3}'.format(self.name, self.java, self.c, self.py)
def main():
start = timeit.default_timer()
st1 = Score('K군', 92, 88, 22)
print(st1) # 이름 : K군 / java : 92 / c : 88 / py : 22
print(st1.__dict__) # {'name': 'K군', 'java': 92, 'c': 88, 'py': 22}
stop = timeit.default_timer()
print(stop - start) # 3.950000000000134e-05
main()
# __slots__ 가 존재하는 객체
import timeit
class Score:
__slots__ = ('name', 'java', 'c', 'py')
def __init__(self, name, java, c, py):
self.name = name
self.java = java
self.c = c
self.py = py
def __str__(self):
return '이름 : {0} / java : {1} / c : {2} / py : {3}'.format(self.name, self.java, self.c, self.py)
def main():
start = timeit.default_timer()
st1 = Score('K군', 92, 88, 22)
print(st1) # 이름 : K군 / java : 92 / c : 88 / py : 22
# print(st1.__dict__) # 실행시키면 오류 발생
stop = timeit.default_timer()
print(stop - start) # 3.0800000000000965e-05
main()
728x90
'# Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 정리(16)_데코레이터 (0) | 2021.07.31 |
---|---|
[Python] 파이썬 정리(15)_프로퍼티 (0) | 2021.07.31 |
[Python] 파이썬 정리(13)_정보은닉/__dict__ (0) | 2021.07.31 |
[Python] 파이썬 정리(12)_스페셜 메소드/연산자 오버로딩 (0) | 2021.07.31 |
[Python] 파이썬 정리(11)_Object 클래스에 있는 메소드 (0) | 2021.07.31 |