При итерации атрибутов класса я вижу атрибуты @classmethod и @staticmethod, но я не уверен, как можно их вообще идентифицировать, основываясь на их типе
class DeprecatedClassWithInit(object):
def __init__(self):
pass
def foo(self):
return "DeprecatedClassWithInit.foo()"
@classmethod
def bar(cls):
return "DeprecatedClassWithInit.bar(cls)"
@staticmethod
def bab():
return "DeprecatedClassWithInit.bab()"
и атрибутахвыглядят так:
bab = <function bab at 0x7f354f5711b8> (type = <type 'function'>)
bar = <bound method type.bar of <class 'utils.test_decorators.DeprecatedClassWithInit'>> (type = <type 'instancemethod'>)
foo = <unbound method DeprecatedClassWithInit.foo> (type = <type 'instancemethod'>)
Таким образом, методы экземпляров имеют str() == "<unbound method DeprecatedClassWithInit.foo>"
И метод класса имеет str() == "<bound method type.bar of <class ...>>"
И метод static имеет str() == <function bab at 1232455>
Является ли это хорошим способом определения атрибутов