python - 动态添加基类?

标签 python inheritance syntax python-2.6

假设我有一个定义如下的基类:

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/

相关文章:

python - 限制 RAM : python crashes instead of MemoryError

python - 在docker中使用pip安装python mysqlclient时出现 'OSError: mysql_config not found'错误

python - 如何在字典中查找短语?

Java语法: Shortcuts in Method Declarations?

mysql - #1064 从表中删除项目时

python - 如何在 Pyqt 中正确设置小部件的父级?

Java:如何修改子类的实例变量

xml - 替换看板图像 OpenERP

c++ - C++ 继承的最佳实践

c - 如何准确理解 malloc() 和 calloc() 两个函数的语法