我有幾十個類。這裏有兩個:自動生成子類的方法
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生成它們或使用類裝飾器。有沒有辦法做到這一點?
注:所有的類都在各自獨立的模塊
也許將'from_A'和'from_B'重命名爲'from_self'之類的東西可以讓它更容易。你可以像「{'A':Class_A,'B':Class_B}''一樣有一個詞典來幫助你的班級裝飾者...... – JBernardo
@JBernardo不,我認爲這不會有幫助。我在示例代碼中添加了更多,以便更清楚。 – Arlen
您能否給我們一個更好的想法Class_A.from_A和Class_q.from_A有什麼不同? – cwallenpoole