我正在尝试在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)