我正在尝试在Python中动态创建类,并且对于类和类继承而言相对较新。基本上,我希望我的最终对象根据不同的需求具有不同类型的历史记录。我有一个解决方案,但我觉得必须有更好的方法。我梦到了这样的事情。

class A:
    def __init__(self):
        self.history={}
    def do_something():
        pass

class B:
    def __init__(self):
        self.history=[]
    def do_something_else():
        pass

class C(A,B):
    def __init__(self, a=False, b=False):
        if a:
            A.__init__(self)
        elif b:
            B.__init__(self)

use1 = C(a=True)
use2 = C(b=True)

最佳答案

我假设由于某种原因您不能更改A和B,并且您需要同时使用两者的功能。

也许您需要的是两个不同的类:

class CAB(A, B):
    '''uses A's __init__'''

class CBA(B, A):
    '''uses B's __init__'''

use1 = CAB()
use2 = CBA()



我真的不建议动态创建一个类。您可以使用函数来执行此操作,并且可以轻松地执行诸如腌制实例之类的操作,因为它们在模块的全局命名空间中可用:
def make_C(a=False, b=False):
    if a:
        return CAB()
    elif b:
        return CBA()

但是如果您坚持“动态创建类”
def make_C(a=False, b=False):
    if a:
        return type('C', (A, B), {})()
    elif b:
        return type('C', (B, A), {})()

用法之一是:
use1 = make_C(a=True)
use2 = make_C(b=True)

09-25 21:31