Если у вас есть ссылка на классы, определенные в вашей области видимости, вам нужно проверить для каждого из них:
def exampleFunc(f):
class_list = [...]
return any(f in vars(c).values() for c in class_List)
Это вернет True
, если функция f
является методом экземпляра,Однако, если вы хотите вернуть фактическое имя класса:
def exampleFunc(f):
class_list = [...]
for c in class_list:
if f in vars(c).values():
return c.__name__
return 'global function' if 'lambda' not in f.__name__ else 'lambda'
Обратите внимание, что это не работает для __dunder__
методов и методов, которые наследует ваш класс.Например,
class A:
def f1(self): pass
class B(A):
def f2(self): pass
print(vars(B))
mappingproxy({'__doc__': None,
'__module__': '__main__',
'f2': <function __main__.B.f2>})
Обратите внимание, что f1
не является частью B
mappingproxy
.