簡體   English   中英

關於python內置屬性__dict__和__setattr__的困惑

[英]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 = 1setattr(a, 'test', 1)實際上調用__setattr__方法來設置屬性test但是dir(a)中沒有__setattr__ ,這就是為什么a.__setattr__引發錯誤現在a.testsetattr(a, 'test', 1)工作?感謝任何建議和建議,尤其是第二個問題,謝謝!

  1. .__dict__是一種“元屬性”,通常是放置所有屬性的存儲。 因此,它具有特殊的作用,這就是為什么它沒有顯示在dir(...)
  2. 他們只會調用.__setattr__()如果存在);否則,它們會被調用。 如果不是,則僅在.__dict__設置相應的屬性。

存在__setattr__ ,以便您可以自定義屬性的設置方式,以及與許多其他“魔術”方法類似。 例如,您無需定義__new____init__即可創建A的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM