詳細な質問は、A、B、C、D...Z など、たくさんのクラスがあり、それらはすべて「ベース」から派生したものです。それらはすべて set_value メソッドを持っています。ここで、A...Z の set_value をオーバーライドするサブクラスが必要です。新しい set_value の実装はすべて同じです。理論的には、クラス AA(A)、クラス BB(B) のようなことを行うことができます...しかし、それは退屈でコンパクトではありません。A...Z の 1 つまたはすべてにサブクラスが必要かどうかはわかりません。サブクラスのオブジェクトを作成するときに作成します。
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()