相关疑难解决方法(0)

python数据和非数据描述符

根据Python的文档,

带有__set__()__get__()定义的数据描述符总是覆盖实例字典中的重定义.

我理解这句话没有问题,但是有人可以为我澄清为什么会有这样的规则吗?毕竟,如果我想覆盖实例字典中的属性,我已经需要明确地执行(inst.__dict__["attr"] = val),因为天真inst.attr = val会调用描述符的__set__方法,这通常会覆盖实例字典中的属性.

编辑:为了说清楚,我理解发生了什么,我的问题是为什么这样的规则到位.

python descriptor python-descriptors

11
推荐指数
1
解决办法
1780
查看次数

Python:Metaclass属性有时会覆盖类属性?

以下代码的结果令我难以置信:

class MyClass(type):
    @property
    def a(self):
        return 1

class MyObject(object):
    __metaclass__ = MyClass

    a = 2

print MyObject.a
print object.__getattribute__(MyObject, 'a')
print type.__getattribute__(MyObject, 'a')
print MyObject.__dict__['a']
print MyObject().a
Run Code Online (Sandbox Code Playgroud)

我真的希望这只是2重复打印,但它会打印出来1 1 1 2 2.有没有一种方法可以直观感觉?


澄清一下:我理解这种行为有很好的文档记录(这里是"数据描述符"),但我想了解为什么这有意义,以及核心开发人员为什么以这种方式实现描述符.

python metaclass

5
推荐指数
1
解决办法
644
查看次数