詳細的問題是我有很多類,比如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,對吧?我認爲如果你展示了一些真實的代碼,它會更好。你可能根本不需要這個複雜的類型系統(然後你可能會再次)。 –