【发布时间】:2018-01-12 22:08:11
【问题描述】:
我正在寻找一种在 python 中构建类的方法:
- setter 在赋值前检查值的类型
- 无法添加新的类属性
暂时我找到了这两个装饰器:
def getter_setter_gen(名称,类型_): def getter(自我): 返回 getattr(self, "__" + name) def setter(自我,价值): 打印“二传手”,价值 如果不是 isinstance(value, type_): raise TypeError("%s 属性必须设置为 %s 的实例" % (name, type_)) setattr(自我,“__”+名称,值) 返回属性(getter,setter) def auto_attr_check(cls): new_dct = {} 打印“auto_attr_check”,cls.__dict__.items() 对于 cls.__dict__.items() 中的键、值: 如果是实例(值,类型): 值 = getter_setter_gen(键,值) new_dct[键] = 值 # 创建一个新类,使用修改后的字典作为类字典: n = type(cls)(cls.__name__, cls.__bases__, new_dct) 返回 n和
def froze_it(cls): def freezesetattr(self, key, value): 打印键 键=''+键 打印(目录(自我)) 打印键 如果没有 hasattr(self, key): raise TypeError("Class {} 被冻结。无法设置 {} = {}" .format(cls.__name__, 键, 值)) 别的: object.__setattr__(self, key, value) cls.__setattr__ = freezesetattr 返回 cls但是我在加入这两种方法时遇到了很多麻烦。 你能帮助我吗?你有想法吗? 非常感谢
【问题讨论】: