我只想在加载类(不是每个对象)后合并当前类和继承类的约束。
class Domain(Validatable):
constraints = {...}
为此,我定义了一个方法_initialize_class_not_instance
,应该为每个类调用一次:
class Validatable:
@classmethod
def _initialize_class_not_instance(cls):
# merge constraints from derived class and base classes
pass
__class__._initialize_class_not_instance() # doesn't work
# Validatable._merge_constraints() # doesn't work too
问题是__class__
在此上下文中不存在,而且Validatable
也未定义。但我想避免的是,我的API的用户必须显式地调用initialize方法,或者必须使用额外的类装饰器。
你知道如何初始化这个类吗?
使用元类。
最后我得到了一个没有继承权的类装饰器。此修饰符合并当前类和继承类的约束,并重写
__init__
方法:这是我的解决方案的关键,因为decorator必须修改类(合并约束和插入方法)和实例。
相关问题 更多 >
编程相关推荐