详细的问题是我有很多类,比如A,B,C,D ... Z,它们都来自'Base'。他们都有一个方法set_value。现在我需要有一些子类来覆盖A ... Z的set_value,新set_value的实现对所有的都是一样的。理论上讲,我可以做类似AA(A),BB(B)类的东西......但是它很乏味而且不紧凑,我不确定A ... Z中的一个或全部是否需要一个子类,我只想当我创建子类的对象时创建它。Python,如何灵活创建子类?
在C++中,我可以通过模板轻松地做到这一点:
template<class T>
class CCustom : public T
{
};
CCustom<vector<int> > obj1;
CCustom<list<char> > obj2;
添加一些演示Python脚本在这里,以帮助解释我的问题:
class Base:
def set_value(self):
pass
class A(Base):
def set_value(self):
print('A.set_value')
class B(Base):
def set_value(self):
print('B.set_value')
class C(Base):
def set_value(self):
print('C.set_value')
def more_set_value():
print('all subclasses do this')
class AA(A):
def set_value(self):
more_set_value()
super().set_value()
class BB(B):
def set_value(self):
more_set_value()
super().set_value()
class CC(C):
def set_value(self):
more_set_value()
super().set_value()
a = AA()
b = BB()
c = CC()
a.set_value()
b.set_value()
c.set_value()
可以看到AA,BB和CC几乎一样。当有数百种这类课程需要投入我的项目时,这很无聊。我认为必须有一种方法来写一个工厂函数,创建AA,BB和CC动态,这样我可以做到以下几点:
AA = create_custom_subclass(A)
a = AA()
a.set_value()
混入,类工厂,甚至类的装饰。有很多选择,你需要解释问题,而不是要求与C++等价。用Python思考。 ;-) –
模板在C++中引入以处理多种类型的相同代码。但是这个问题在Python中显然不存在。除此之外,我不确定重写基本方法是如何与模板相关的?这个问题根本不明确。 – freakish
此外,只是为了检查:你知道你不需要Python中的setters,对吧?我认为如果你展示了一些真实的代码,它会更好。你可能根本不需要这个复杂的类型系统(然后你可能会再次)。 –