屬性
__dict__
維護類或實例中所有的成員。
class SubStrClass(str):
a = 1
def __init__(self):
self.b = 2
def myprint(self):
pass
print SubStrClass.__dict__
print SubStrClass().__dict__
結果:
{'a': 1, '__module__': '__main__', 'myprint': <function myprint at 0x0000000002A37208>, '__dict__': <attribute '__dict__' of 'SubStrClass' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000002A372E8>}
{'b': 2}
注意類與實例調用這一屬性輸出的區別。
但並非所有的實例都會有這一屬性,比如在類中添加了一個__slots__的屬性。
__slots__
定義了__slots__屬性之後,該類的實例只能擁有__slots__屬性,就不會存在__dict__了。
作用:
阻止在實例化時,該類能動態添加的屬性,沒有定義時,該屬性不存在。
class SubStrClass(object):
__slots__ = ('a','b','c')
a = 1
def __init__(self):
self.b = 2
self.d = 4 #此處會報錯,因爲__slots__屬性中沒有d,在實例中不能包含該屬性
def myprint(self):
pass
print SubStrClass.__slots__
print SubStrClass().__slots__
ins = SubStrClass()
ins.b = 1
ins.d = 2 #此處會報錯,因爲__slots__屬性中沒有d,在實例中不能添加該屬性
結果:
('a', 'b', 'c')
('a', 'b', 'c')
方法
__new__
__init__是當實例對象創建完成後被調用的,然後設置對象屬性的一些初始值。
__new__是在實例創建之前被調用的,因爲它的任務就是創建實例然後返回該實例,是個靜態方法。
__new__在__init__之前被調用,__new__的返回值(實例)將傳遞給__init__方法的第一個參數,然後__init__給這個實例設置一些參數。
__new__(cls, *args, **kwargs)