这里是python的新手,我希望将一些类ClassA.methodA附加到另一个ClassB,如下所示
def methodA(self, x=None, y=None, z='somevalue', l=None, m=False, **kwds):
... Some logic here....
a = self.getMyInstanceOfClassA() //a is of type ClassA, not ClassB
a.methodA(x,y,z,l,m,**kwds)
ClassB.methodA = methodA
...
h = ClassB()
h.methodA("p1", "p2", m=True)
目标是保持ClassB.methodA的签名与它应该在ClassB.getMyInstanceOfClassA()
方法上可访问的实际ClassA.methodA上相同。
我这样做的原因是为了避免我的用户编写此代码
h = ClassB()
---the extra logic---
a = h.getMyInstanceOfClassA()
a.methodA(....)
反而只是说
h = ClassB()
h.methodA(....)
我将额外的逻辑嵌入到ClassB的新方法A中。
methodA在我们的域中是有意义的,我必须保留其名称和确切的签名
我必须从内部库中导入ClassA和ClassB,并且我不能从ClassA继承ClassB。
关键是methodA通常不会被调用所有参数,传递的参数取决于你想要methodA做什么。这个h.methodA("p1", "p2", m=True)
失败了一些错误,抱怨传递了太多的参数。
我是否正确包装了methodA?
答案 0 :(得分:0)
我认为你通常只使用继承或只是使该方法成为与该类无关的函数,其中一个输入是该类的实例。或者你只需将它包装在lambda函数中。
Python: Bind an Unbound Method?
但是,如果你想要一个方法并将它绑定到一个类的实例,请使用类似下面的代码。
inst = MyClass()
inst.methodA = methodA.__get__(inst, MyClass)