假设我有一个定义如下的基类:
class Form(object):
class Meta:
model = None
method = 'POST'
现在开发人员来了很长时间并定义了他的子类:
class SubForm(Form):
class Meta:
model = 'User'
现在 method
属性突然丢失了。我怎样才能在不强制用户从我的继承他的元类的情况下“取回它”?我可以在初始化程序中或在元类的 __new__
函数中向 Form.Meta
动态添加基类吗?
最佳答案
只要它们不会覆盖您的__init__
,或者它将被调用(即被super
),您就可以猴子修补Meta
内部类:
class Form(object):
class Meta:
model = None
method = "POST"
def __init__(self, *args, **kwargs):
if self.__class__ != Form:
self.Meta.__bases__ += (Form.Meta,)
# other __init__ code here.
class SubForm(Form):
class Meta:
model = 'User'
关于python - 动态添加基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169502/