python-類屬性及方法

屬性

__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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章