Аналогичный вопрос (связанный с Python2: Python: проверьте, является ли метод статическим)
Давайте рассмотрим следующее определение класса:
class A:
def f(self):
return 'this is f'
@staticmethod
def g():
return 'this is g'
В Python 3 больше нет instancemethod
, все функции, поэтому ответ, относящийся к Python 2, больше не будет работать.
Как я уже сказал, все функции, поэтому мы можем вызвать A.f(0)
, но, конечно, мы не можем вызвать A.f()
(несоответствие аргументов). Но если мы создадим экземпляр a=A()
и вызовем a.f()
, Python передаст функции A.f
self
в качестве первого аргумента. Вызов a.g()
предотвращает его отправку или захватывает self
, поэтому должен быть способ проверить, является ли это статическим методом или нет.
Итак, можем ли мы проверить в Python3, был ли метод объявлен как static
или нет?