1
我想製作一個與ECMAScript 5「凍結」對象類似的功能,您無法在其上更改任何內容。Python描述符不掛鉤類級別屬性
這樣做:
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 = {}
失敗以同樣的方式在其他任務沒有?爲什麼不呢?