我很好奇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!