假设我想让我的课在属性访问上做些事情。当然,我能做到这一点的getter和setter方法: class Foo {
set bar (v) {
// do stuff
}
}
但是,如果我要附加相同的行为,以多个属性,我必须明确地定义相同的getter和setter方法为每一个他们。 (我记住的用例是一个可观察对象,即知道它的属性何时被更改的类)。 我希望做
在Python 3 class A(object):
attr = SomeDescriptor()
...
def somewhere(self):
# need to check is type of self.attr is SomeDescriptor()
desc = self.__class__.__dict__[attr_name
所以为了摆脱一些样板我选择实施__getattr__委托一些方法调用。问题是我在属性查找链中也有一个描述符,并且它们没有像我期望的那样进行交互。这里的代码: class C(object):
attr = Descriptor()
def __getattr__(self, item):
# just returns a method for all items
我想制作一个与ECMAScript 5“冻结”对象类似的功能,您无法在其上更改任何内容。 这样做: class Fixed(object):
frzn = 'I AM AWESOME'
def holdset(_,val):
_.frzn = _.frzn
print "frozen is frozen not setting to ", v