1. 程式人生 > 其它 >python魔術方法之__slots__

python魔術方法之__slots__

__slots__作用

1.減少記憶體消耗

2.限制新增類屬性及類初始化引數

實現__slots__

1.限制單個類屬性

class Base(object):
    __slots__ = ['name']
  pass

B
= Base() B.name = 'John'

2.限制多個類屬性,在__slots__的列表中繼續新增即可

class Base(object):
    __slots__ = ['name','age']
  pass

B
= Base() B.name = 'John' B.age = 18

當新增類屬性為非__slots__列表中的引數,會報錯 AttributeError: 'Base' object has no attribute 'name1'

class Base(object):
    __slots__ = ['name']

    pass
B = Base()
B.name1 = 'John'  #AttributeError: 'Base' object has no attribute 'name1'

同樣,__slots__會限制類初始化引數

class Base(object):
    __slots__ = ['name']

    def __init__(self,name,age):
        self.name = name
        self.age = age
    pass
B = Base('John',18) #AttributeError: 'Base' object has no attribute 'age'

節約記憶體

由於預設情況下每個類都會有一個dict,通過__dict__訪問,這個dict維護了這個例項的所有屬性。如果類中使用__slots__時,該物件不會自動產生__dict__屬性

class Base(object):
    __slots__ = ['name']

    def __init__(self,name):
        self.name = name
    pass

B = Base('John')

print(B.__dict__) #列印報錯AttributeError: 'Base' object has no attribute '__dict__' class Base(object): # __slots__ = ['name'] def __init__(self,name): self.name = name pass B = Base('John') print(B.__dict__) # {'name': 'John'}