7
A
回答
13
當屬性不存在於實例/類/父類中時,會調用__getattr__
魔術方法。你會用它來提高一個特殊的例外丟失屬性:
class Foo(object):
def __getattr__(self, attr):
#only called what self.attr doesn't exist
raise MyCustonException(attr)
如果你想定製訪問類的屬性,您需要在元類/類型定義__getattr__
:
class BooType(type):
def __getattr__(self, attr):
print attr
return attr
class Boo(object):
__metaclass__ = BooType
boo = Boo()
Boo.asd # prints asd
boo.asd # raises an AttributeError like normal
如果要自定義所有屬性訪問,請使用__getattribute__
魔術方法。
2
agf's answer是正確的,實際上我要給出的答案是基於它的,並且有一定的功勞。
只給更詳細的類屬性的一面,這是實際上是在這裏的問題(而不是__getattr__
和__getattribute__
之間的差異)的一部分,我想添加一個參考an answer I wrote to a different similar question,肚裏更詳細地介紹類和實例屬性之間的區別,實現方式以及爲什麼需要使用元類來影響類屬性查找。
+2
嘿,你對另一個問題的回答很好,但這不是真正的答案。你應該在這裏添加一些內容或張貼這個問題或我的答案評論。 – agf 2013-04-24 15:04:44
相關問題
- 1. Python的覆蓋元類集屬性
- 2. 覆蓋訪問類
- 3. 如何覆蓋Python 3中的默認類屬性值?
- 4. 如何覆蓋類屬性的.ToString
- 5. 使用Python覆蓋屬性
- 6. 如何覆蓋部分類屬性
- 7. 可以通過實例和類訪問的可覆蓋屬性
- 8. EntityFramework如何覆蓋屬性
- 9. 如何覆蓋css屬性?
- 10. LuisIntent屬性如何覆蓋?
- 11. 如何覆蓋struts.messages.error.file.too.large屬性
- 12. 如何在覆蓋其類的__dict__屬性後訪問實例字典?
- 13. 覆蓋部分類中的屬性(DBML)
- 14. 如何覆蓋子類中.NET框架類的屬性?
- 15. 覆蓋屬性
- 16. 屬性覆蓋
- 17. 覆蓋屬性
- 18. 覆蓋基本屬性並訪問基準中的引用
- 19. 使用@synthesize覆蓋Objective-C中的屬性訪問器名稱
- 20. 覆蓋ControlTemplate中的屬性
- 21. 如何避免在Python中覆蓋系統庫的屬性?
- 22. Python:如何覆蓋方法調用中的數據屬性?
- 23. 如何覆蓋Kotlin中的java類的屬性?
- 24. 數據屬性是否覆蓋Python中某個類的方法屬性?
- 25. 如果childs屬性被覆蓋,則訪問父函數
- 26. 如何訪問在後期添加的Python中的類屬性?
- 27. 如何用更具體的類型覆蓋超類的屬性?
- 28. Python類覆蓋
- 29. 如何覆蓋C#中的繼承類屬性?
- 30. 如何覆蓋部分類中的屬性?
是不是修改實例不是類屬性訪問? – 2012-03-22 10:26:26
@ RomanA.Taycher我已經擴展了我的答案。 – agf 2012-03-22 10:32:57