[英]Confusions about python builtin attributes __dict__ and __setattr__
class A():
# A not inherit from object
pass
a = A()
print 'a.__dict__ : ', a.__dict__ # {}
print 'dir(a) : ', dir(a) # ['__doc__', '__module__']
print 'dir(A) : ', dir(A) # ['__doc__', '__module__']
1.第一個問題a.__dict__
證明'a'具有__dict__
屬性,但是在dir(a)或dir(A)之后,找不到__dict__
,attr __dict__
在哪里?
# next i tried to give the 'a' attribute 'test' whose value is 1 in 3 diff ways
a.test = 1 # fine!
setattr(a, 'test', 1) # it works!
a.__setattr__('test', 1) # Attribute Error raised,'a' has no attr __setattr__
2, a.test = 1
我所知, a.test = 1
和setattr(a, 'test', 1)
實際上調用__setattr__
方法來設置屬性test
但是dir(a)中沒有__setattr__
,這就是為什么a.__setattr__
引發錯誤現在a.test
和setattr(a, 'test', 1)
工作?感謝任何建議和建議,尤其是第二個問題,謝謝!
.__dict__
是一種“元屬性”,通常是放置所有屬性的存儲。 因此,它具有特殊的作用,這就是為什么它沒有顯示在dir(...)
。 .__setattr__()
如果存在);否則,它們會被調用。 如果不是,則僅在.__dict__
設置相應的屬性。 存在__setattr__
,以便您可以自定義屬性的設置方式,以及與許多其他“魔術”方法類似。 例如,您無需定義__new__
或__init__
即可創建A的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.