防止类的函数属性作为第一个参数传递给自身

2024-04-25 00:23:39 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
2条回答

据我所知,包装(像你的装饰)是最简单的方法。既然你已经有了一个存储函数的对象,我就不需要装饰器了。(请注意,我继承了object,这是您可能应该做的事情,除非您明确地想要老式的类行为。)

class A(object):

    def __init__(self, callback):
        self._callback = callback
        self.callback(1,2)


    def callback(self, *args, **kwargs):
        return self._callback(*args, **kwargs)

这与您预期的一样:

>>> def f(x, y):
...     print "X: %s, Y: %s" % (x,y)
... 
>>> mya = A(f)
X: 1, Y: 2

当您将它绑定到类时,只需要将它设置为staticmethod。你知道吗

def callback(a, b):
    # do something with a, b

class A:
    def __init__(self, callback):
        # now it won't get passed self
        self.callback = staticmethod(callback)
        self.callback(1, 2)

或者

class A:
    def __init__(self, callback):
        self.callback(1, 2)

    # now it won't get passed self
    callback = staticmethod(callback)

相关问题 更多 >