Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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 “\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\__`_Python_Exception_Python Datamodel - Fatal编程技术网

Python “\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\__`

Python “\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\__`,python,exception,python-datamodel,Python,Exception,Python Datamodel,注意评论中回答了这些问题 我注意到在\uuu getattribute\uuuu和\uuu getattr\uuuuu中有一些异常处理行为,我在文档或其他文章中找不到这些行为 考虑此类A。如果A的实例具有None属性,则访问该属性会引发AttributeError class A: def __getattribute__(self, item): value = object.__getattribute__(self, item) if value i

注意评论中回答了这些问题

我注意到在
\uuu getattribute\uuuu
\uuu getattr\uuuuu
中有一些异常处理行为,我在文档或其他文章中找不到这些行为

考虑此类
A
。如果
A
的实例具有
None
属性,则访问该属性会引发
AttributeError

class A:
    def __getattribute__(self, item):
        value = object.__getattribute__(self, item)
        if value is None:
            raise AttributeError('in __getattribute__')

        return value

    def __init__(self, a=None):
        self.a = a

A(1).a  # 1
A().a  # raises AttributeError('in __getattribute__')
现在,on
\uuuu getattribute\uuuu
上的

无条件调用以实现类实例的属性访问。如果该类还定义了
\uuuuuGetAttr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
,则后者将不会被调用,除非
\uuuuuuuuuuuuuuuuuuuuuuuuGetAttribute\uuuuu

class A:
    def __getattribute__(self, item):
        value = object.__getattribute__(self, item)
        if value is None:
            raise AttributeError('in __getattribute__')

        return value

    def __init__(self, a=None):
        self.a = a

A(1).a  # 1
A().a  # raises AttributeError('in __getattribute__')
从这一点上,我可以猜到在
\uuuu getattribute\uuuu
中提出的任何
AttributeError
都会被捕获,并且进程会推迟到
\uu getattr\uuuu
,这样调用方就永远看不到
AttributeError('in u getattribute\uuuu')

令我惊讶的是,不仅看到了错误,还看到了在
A()上引发的
AttributeError
。A
\uuuu getattribute\uuuuuu
中的一个,就好像从未调用过
\uu getattr\uuuuu
一样。除非
\uuu getattr\uuu
提出自己的

def __getattr__(self, item):
    raise AttributeError('in __getattr__')
在这种情况下,我们会看到出现
AttributeError('in uu getattr_uu')


这里有什么规定?如果我在
中提出了
AttributeError
的一些子类
Oops
,而不是
AttributeError('in'uuuuuuu getattribute\uuuuuu')
,那么它们是否适用?

总结了这些评论

重点是我的)声明:

无条件调用以实现类实例的属性访问如果该类还定义了,则将不会调用后者,除非显式调用它或引发错误。此方法应返回(计算的)属性值或引发异常。为了避免此方法中的无限递归,其实现应始终使用相同的名称调用基类方法,以访问它所需的任何属性,例如,
object.\uuuu getattribute\uuuuu(self,name)

混淆是因为假设uuu getattr_uuuu是从对象继承的(这是错误的):

目录(对象) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"新","减少","减少","增加","报告","设置属性","大小","str","子类钩子" >>> >>>对象。获取属性__ >>>对象。\u\u getattr__ 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:类型对象“object”没有属性“\uuu getattr\uuuu”

虽然我可以理解为什么它可能会让一些人感到困惑,但从我所关心的(在多次阅读文档之后),很明显:
如果uuu getattr_uu.是从object继承的,那么(引用的)文本“如果类也定义了u getattr_uu()”将毫无意义总结注释

重点是我的)声明:

无条件调用以实现类实例的属性访问如果该类还定义了,则将不会调用后者,除非显式调用它或引发错误。此方法应返回(计算的)属性值或引发异常。为了避免此方法中的无限递归,其实现应始终使用相同的名称调用基类方法,以访问它所需的任何属性,例如,
object.\uuuu getattribute\uuuuu(self,name)

混淆是因为假设uuu getattr_uuuu是从对象继承的(这是错误的):

目录(对象) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"新","减少","减少","增加","报告","设置属性","大小","str","子类钩子" >>> >>>对象。获取属性__ >>>对象。\u\u getattr__ 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:类型对象“object”没有属性“\uuu getattr\uuuu”

虽然我可以理解为什么它可能会让一些人感到困惑,但从我所关心的(在多次阅读文档之后),它非常清楚:
如果uu getattr_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u_u)是从对象继承的,那么(引用的)文本“如果类还定义了u_ugetattr_u如果类也定义了

,那么就没有意义了
如果类也定义了-你的类没有定义
\uuuuuu getattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu. 文档中的
对象是什么意思?\uuuu getattr\uuuu
然后?啊,“可以定义以下方法来自定义类实例的属性访问(使用、分配或删除x.name)的含义。”那么这里的问题是什么?我没有看到任何。
如果类也定义了
-你的类没有定义
\uu getattr\uuuu
@snakecharmerb奇怪,那么继承自
对象的
\uu getattr\uuuu
会发生什么?奇怪-在
对象上没有
\uu getattr\uuu
(尝试
对象)。文档中的
对象是什么意思?\uuuu getattr\uuuu
然后?啊,“可以定义以下方法来自定义类实例的属性访问(使用、分配或删除x.name)的含义。”那么这里的问题是什么?我没有看到。