我有几十个类。这里有两个:自动生成子类的方法
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