我想做一个类似于ECMAScript 5“冻结”对象的特性,在这个特性中,您不能对其进行任何更改。你知道吗
是否:
class Fixed(object):
frzn = 'I AM AWESOME'
def holdset(_,val):
_.frzn = _.frzn
print "frozen is frozen not setting to ", val
frozen = property(fset=holdset)
@classmethod
def __setattr__(self, name, val):
if name=="frozen":
print "You can't unfreeze the frozen"
else:
self.name = val
dd = Fixed()
dd.frozen = 12312312
dd.frozen = 'AA'
Fixed.frozen = {}
print dd.frozen
print Fixed.frozen
这给了
You can't unfreeze the frozen
You can't unfreeze the frozen
{}
{}
当前两个赋值将属性引用为实例成员时,它们将失败。当属性作为类成员引用时,第三个赋值成功。你知道吗
我不明白为什么。你知道吗
我该怎么做
Fixed.frozen = {}
和其他作业一样失败?为什么不呢?
您需要重写元类的
__setattr__
。元类是一个创建类的类(类似于类创建的实例),因此,要覆盖与类对象相关的内容,需要修改元类上的特殊方法。你知道吗相关问题 更多 >
编程相关推荐