是否可以在Python中使用绑定和非绑定方法?

时间:2015-03-16 14:13:02

标签: python class methods static-methods

我很好奇Python是否同时允许绑定和未绑定版本在类中具有相同名称的方法,例如。

class Bounds(object):
    def __init__(self):
        pass

    def method(self):
        print('I am a bound method')

    @staticmethod
    def method():
        print('I am an unbound method free of the class instance!')

我希望做类似的事情:

>>> b = Bounds()
>>> b.method()
I am a bound method
>>> Bounds.method()
I am an unbound method free of the class instance!

然而,我得到的是两个版本中类中最后定义的方法。

任何帮助将不胜感激 - 谢谢!

修改

对于那些对绑定和非绑定使用感兴趣的人(尽管它混淆了API),可以通过在派生类的构造函数中使用基类和lambda的一些脏黑客来实现:

class _Bounds(object):
    def method(self, msg="Can you free me?"):
        print('I am a bound method: "{}"'.format(msg))

class Bounds(_Bounds):
    @staticmethod
    def method():
        print('I'm free from the shackles of the class instance!')

    def __init__(self):
      self.method = lambda **kw: _Bounds(self, **kw)
      # do stuff

然后测试:

>>> Bounds().method()
I am a bound method: Can you free me?
>>> Bounds.method()
I'm free from the shackles of the class instance!

0 个答案:

没有答案