这是简化的上下文:
class A(object):
def __init__(self):
self.vocab = [
('method1', self.method1),
('method2', 'arg2', self.method2),
('method3', self.method3),
]
class SubA(A):
def method4(self):
pass
def method5(self, arg5):
pass
class SubB(A):
def method6(self):
pass
def method7(self):
pass
我想self.vocab
用所有子类中的所有方法“自动”填充类 A 中的列表,并遵循self.vocab
初始化中定义的规则。所以在这个例子中,我想在对象实例化时自动添加 method4,...,method7。所以 self.vocab 变成:
self.vocab = [
('method4', self.method4),
('method5', 'arg5', self.method5),
('method6', self.method6),
('method7', self.method7),
('method1', self.method1),
('method2', 'arg2', self.method2),
('method3', self.method3),
]
我认为我必须将 A 更改为元类并__new__
改为使用,因为我认为它必须在实例化之前完成。事实上,A 类是由另一个代码自省的。self.vocab 在实例化过程中被提取,这就是为什么我认为它必须在之前完成。
我不知道如何进行以及是否可能。