not_use.demo4_immutable_class 源代码

"""create a immutable object
"""

[文档]class MyImmutable(object): """一个immutable的类 当这个实例初始化之后,禁用掉__setatt__和__delattr__,本实例即成为一个immutable对象 实际上用户当然可以用其它方式来修改这个对象,但是用户会自已负责 实际上这是一个约定,而非强烈的约束 """ def __init__(self, a, b): object.__setattr__(self, 'a', a) object.__setattr__(self, 'b', b)
[文档] def __setattr__(self, *args): """重新赋值会抛exception""" raise Exception('不能set')
[文档] def __delattr__(self, *args): """删除属性也会抛exception""" raise Exception('不能get')
import collections my_immutable = collections.namedtuple('my_immutable', ('a', 'b')) if __name__ == '__main__': # m1 = MyImmutable(3, 6) # print(m1.a, m1.b) # m1.a = 10 # m1.b = 20 # print(m1.a, m1.b) my_immutable.a = 3 print(my_immutable) print(my_immutable.a) my_immutable.a = 4 print(my_immutable[0])