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

+ Recent posts