相关疑难解决方法(0)

在实例化期间更改 __getattr__

我想__getattr__在类的实例化过程中进行更改。例如:

class AttrTest(object):
    def __init__(self):
        self.__getattr__ = self._getattr

    def _getattr(self, attr):
        print("Getting {}".format(attr))
Run Code Online (Sandbox Code Playgroud)

我本以为这会表现得像:

class AttrTest(object):
    def __getattr__(self, attr):
        print("Getting {}".format(attr))
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。

例如,当我运行时:

>>> at = AttrTest()
>>> at.test
Run Code Online (Sandbox Code Playgroud)

我希望两个类都能打印Getting test,但顶级类会抛出一个AttributeError.

就不能__getattr__这样改吗?

python

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

为什么自定义Python类实例的`__dict__`属性是类的描述符,而不是实例的实际属性?

来自/sf/answers/3141618231/

请注意,__dict__自定义Python类实例的属性是描述符 ; 实例本身没有属性,它是提供它的类(因此 type(instance).__dict__['__dict__'].__get__(instance)返回). object.__dict__可能存在,但object.__dict__['__dict__']不存在.

为什么__dict__自定义Python类实例的属性是类的描述符,而不是实例的实际属性?

python python-3.x

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

标签 统计

python ×2

python-3.x ×1