具体的问题是我有很多类,比如a,B,C,D…Z,它们都是从“Base”派生的。它们都有一个方法集u值。现在我需要有一些子类来覆盖A…Z的set\u值,新set\u值的实现对所有人都是一样的。理论上,我可以做一些像AA(A),BB(B)类的事情。。。但是它很枯燥而且不紧凑,我不确定A…Z的一个或全部是否需要子类,我只想在创建子类的对象时创建它。你知道吗
在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()
类在Python中是first-class citizens,也就是说,可以像对待任何其他对象一样对待它们。例如,你可以做一个简单的工厂:
或者您可以进行混合(使用的内存比工厂少):
我不完全清楚你想做什么,但我会尽量给你一些建议。你知道吗
unLink C++,Python使用dynamic type system,即变量可以被分配任何类型的对象。这给了你一系列的可能性。你知道吗
只要
obj_of_t_class
有您尝试调用的方法,Python就不关心它是A
、B
还是Z
类型。你知道吗这应该大致等同于你想用C++模板类做什么。你知道吗
相关问题 更多 >
编程相关推荐