Python 定义_ugetattr__;回退
如果我有以下课程:Python 定义_ugetattr__;回退,python,Python,如果我有以下课程: class Item: def __getattribute__(self, a): return super().__getattribute__(a) def __getattr__(self, a): print ("Calling the second one (AttributeError on __getattribute__)!") 现在如果我这样做: i=Item() i.x 它将在\uuuu getattr
class Item:
def __getattribute__(self, a):
return super().__getattribute__(a)
def __getattr__(self, a):
print ("Calling the second one (AttributeError on __getattribute__)!")
现在如果我这样做:
i=Item()
i.x
它将在
\uuuu getattribute\uuuu
中点击属性错误
,并返回到\uuuu getattr\uuuu
。有这样的退路有什么意义?例如,如果达到AttributeError
,为什么不能自定义\uuu getattribute\uuuu
方法本身?定义\uuu getattr\uuu
/\uu getattribute\uuu
对的合法用例是什么?出于历史原因,这是一种方式\uu getattr\uu
是这两种方法中唯一存在于过时的“旧式”类系统中的方法\uuuuGetAttribute\uuuuuuuuuu
后来才出现,但他们无法取出\uuuuuuuuGetAttr\uuuuuuuuuuu
,因为这会破坏很多代码,并且会导致混合旧样式和新样式的类系统的问题
当您希望您的逻辑成为默认逻辑的后备逻辑时,可以定义一个
\uuuu getattr\uuuuuuuuuuuuuuuuuuuuu
而不是重写\uuuuuuu getattribute\uuuuuuuuuuuuuuuuuuuuuu
,这会稍微方便一些,但是,如果从一开始就存在\uuu getattr\uuu
的话,这不太可能足以促使语言中包含\uuu getattr\uuuu
\uu getattr\uu
是这两种方法中唯一存在于过时的“旧式”类系统中的方法\uuuuGetAttribute\uuuuuuuuuu
后来才出现,但他们无法取出\uuuuuuuuGetAttr\uuuuuuuuuuu
,因为这会破坏很多代码,并且会导致混合旧样式和新样式的类系统的问题
当您希望您的逻辑成为默认逻辑的后备逻辑时,可以定义一个
\uuuu getattr\uuuuuuuuuuuuuuuuuuuuu
而不是重写\uuuuuuu getattribute\uuuuuuuuuuuuuuuuuuuuuu
,这会稍微方便一些,但是,如果从一开始就存在\uuuuuu getattr\uuuuu
的话,这不太可能足以促使在语言中包含\uuuuu getattr\uuuuuuu
。这真的很奇怪,尽管可能是这个问题的重复:这真的很奇怪,行为尽管可能与此问题重复: