Как правильно в Python 3.7+ проверить, определена ли функция в классе Python. Пример:
class A:
def fun1(self):
pass
def fun2():
pass
Я хотел бы отметить, что A.fun1
был определен внутри класса, а fun2
- нет.
Как правильно в Python 3.7+ проверить, определена ли функция в классе Python. Пример:
class A:
def fun1(self):
pass
def fun2():
pass
Я хотел бы отметить, что A.fun1
был определен внутри класса, а fun2
- нет.
Вы можете использовать атрибут __qualname__
(определен в PEP 3155) и проверьте, содержит ли он .
, указывающий, что этот объект был определен в вложенная область. Обратите внимание, что это также относится к функциям, определенным внутри других функций, поэтому в этом смысле это может дать вам ложные срабатывания.
>>> def test(): ...
...
>>> test.__qualname__
'test'
>>> class Foo:
... def test(self): ...
...
>>> Foo.test.__qualname__
'Foo.test'
>>> def f():
... def g(): ...
... return g
...
>>> f().__qualname__
'f.<locals>.g'
Вот вам hasattr()
>>> hasattr(A, 'fun1')
>>> True
>>> hasattr(A, 'fun2')
>>> False
magic(A.fun1)
должно вернутьTrue
, аmagic(fun2)
должно вернутьFalse
, верно? - person deceze♦   schedule 22.02.2021ismethod
следует вызывать для объекта. Сделайте это:print(inspect.ismethod(A().fun1), inspect.isfunction(A().fun1)); print(inspect.ismethod(fun2), inspect.isfunction(fun2))
. - person Arty   schedule 22.02.2021