【发布时间】:2011-10-23 15:08:02
【问题描述】:
我有几十节课。以下是其中两个:
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 不,我认为这不会有帮助。为了更清晰,我在示例代码中添加了更多内容。
-
您能否更好地了解 Class_A.from_A 和 Class_q.from_A 之间的区别?
-
@cwallenpoole 没有
Class_A.from_A。Class_q.from_A是从Class_A到Class_q的转换。 -
好的,
Class_A.from_B和Class_A.from_C有什么不同
标签: python python-3.x generative-programming