我有课:
class A(object):
def do_computing(self):
print "do_computing"
然后我有:
new_class = type('B', (object,), {'a': '#A', 'b': '#B'})
我想要实现的是使A类上的所有方法和属性成为B类的成员。A类可以有0到N个这样的元素。我想让他们都成为 B 类的成员。
到目前为止,我得到:
methods = {}
for el in dir(A):
if el.startswith('_'):
continue
tmp = getattr(A, el)
if isinstance(tmp, property):
methods[el] = tmp
if isinstance(tmp, types.MethodType):
methods[el] = tmp
instance_class = type('B', (object,), {'a': '#A', 'b': '#B'})
for name, func in methods.items():
new_method = types.MethodType(func, None, instance_class)
setattr(instance_class, name, new_method)
但是当我运行时:
instance().do_computing()
我收到一个错误:
TypeError: unbound method do_computing() must be called with A instance as first argument (got B instance instead)
为什么我必须这样做?我们有很多遗留代码,我需要花哨的对象,它们会假装它们是旧对象,但实际上。
还有一件事很重要。我不能使用继承,在后台发生了很多魔术。