私は数十のクラスを持っています。ここでは、これらの2つです:ここサブクラスの自動生成メソッド
class Class_A(ClassABC):
def __init__(self):
super().__init__()
def from_B(self, b):
#do stuff
def from_C(self, c):
#do stuff
#...
def to_B(self):
rt = Class_B()
rt.from_A(self)
return rt
def to_C(self):
rt = Class_C()
rt.from_A(self)
return rt
#...
class Class_B(ClassABC):
def __init__(self):
super().__init__()
def from_A(self, a):
#do stuff
def from_C(self, c):
#do stuff
def to_A(self):
rt = Class_A()
rt.from_B(self)
return rt
def to_C(self):
rt = Class_C()
rt.from_B(self)
return rt
#...
#class Class_C, Class_D, Class_E, etc,
とはされABC:
class ClassABC(metaclass=abc.ABCMeta):
@abc.abstractmethod
def __init__(self):
#do stuff
私が持っている問題は、サブクラス内のすべてのto_*
方法はまったく同じパターンに従うと、それが面倒になることですそれらを実装する。可能であればClassABC
に自動的に生成したいと思いますが、これまでには失敗しました。私はサブクラスのためのクラス・デコレータの作成も試みましたが、それはどちらもうまくいきませんでした。しかし、私はexec()を使って各サブクラスでメソッドを自動的に生成することができましたが、ABCに生成させたり、クラスのdecoratersを使用させたりしました。これを行う方法はありますか?
注:次のことができるようにするために、明示的に引数リストの先頭にself
を含める必要があるため、すべてのクラスは、独自の独立したモジュール内のすべての
「from_A」と「from_B」の名前を「from_self」のように変更すると、簡単にできます。クラスデコレータを助けるために '{'A': 'Class_A、' B ':Class_B}のようなディクテーションを持つことができます。 – JBernardo
@JBernardoいいえ、私はそれが役に立たないと思います。私はもっと明確にするためにサンプルコードにもっと多くを加えました。 – Arlen
Class_A.from_AとClass_q.from_Aの違いは何ですか? – cwallenpoole