Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 定义_ugetattr__;回退_Python - Fatal编程技术网

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

这真的很奇怪,尽管可能是这个问题的重复:这真的很奇怪,行为尽管可能与此问题重复: