【发布时间】:2014-06-10 17:48:59
【问题描述】:
我有一个类似的课程:
class C(object):
_use_obj = 'attr1 attr2'.split()
def __init__(self, obj):
self.obj = obj
# class definition continues here defining a few attributes and methods
我希望能够通过C通过一定的规则访问obj的属性。
c.this 应该返回:
-
obj.this如果this在C._use_obj中 -
C.this如果this在C中定义 -
obj.this如果this未在C中定义
this 可以是属性(类或实例)、属性或方法。而且我事先不知道myobj是什么。在没有规则 1 的情况下,我想我可以用 __getattr__ 做到这一点。但是对于规则 1,我不清楚,因为我需要拦截所有属性访问。
【问题讨论】:
-
我不明白为什么您认为规则 1 意味着您不能使用
__getattr__。你能再解释一下吗? -
@BrenBarn 因为如果
this在C中定义,则不会调用__getatrr__ -
这可能有助于更新您的示例,以便它实际显示问题。您的示例
C没有任何与_use_obj中定义的属性重叠的属性。无论如何,您仍然可以使用__getattribute__。
标签: python properties attributes