Я уверен, что вы хотите @staticmethod.
foo = staticmethod(foo)
Вы также можете определить __get__
для вызываемого класса:
class Foo(object):
def __get__(self, obj, type=None):
return self
def __call__(self, x):
print(x)
foo = Foo()
class A(object):
def __init__(self):
self.f = foo
class B(object):
f = foo
foo(1) # 1
a = A()
a.f(1) # 1
print(a.f) #<function foo at 0x2321d10>
print(a.f.__get__(a, A)) #<function foo at 0x2321d10>
b = B()
b.f(1) # 1
print(b.f) #<__main__.Foo object at 0x7fa8c260be10>
Это один дополнительный уровень отступа и несколько дополнительных строк кода, но это то, как это можно сделать, если это важно.