将方法转发给包装的类

时间:2019-01-31 11:22:39

标签: python-3.x python-2.7

我想为另一个类的方法添加一些额外的功能(或多或少地记录),但是需要注意的是,我无法对它们进行子类化,因为我无法控制原始类的实例化,但我可以转发具有相同鸭子类型的对象。换句话说,我想在前面加上一些代码的一些方法,同时转发一切原来的类的实例。

这是什么,我试图完成会像下面这样一个例子:

class A(object):
    def __init__(self, wrapped):
        self._wrapped = wrapped

    def __getattr__(self, name):
        return getattr(self._wrapped, name)

class B(object):
    def foo(self):
        print("foo")

    @classmethod
    def bar():
        print("bar")

b = B()
a = A(b)
a.foo() # prints "foo"
a.bar() # Fails (tries to pass the self parameter to bar())

除了上面的方法对于类方法失败之外,因此在我的情况下不会这样做。有没有一种办法的方式,也可以与类方法和静态方法转移呼叫这样?

0 个答案:

没有答案