статический метод недоступен при запуске init - PullRequest
0 голосов
/ 06 мая 2019

Я понял, что не могу вызвать статический метод класса из его __init__ метода.

class c():

    def __init__(self):
        f()

    @staticmethod
    def f():
        print("f called")

c()

дает NameError: name 'f' is not defined.

Почему не удается найти статический метод?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Это просто потому, что Python ищет функцию с именем f в глобальном пространстве имен, когда вы ссылаетесь на него таким образом.

Чтобы сослаться на метод класса 'f, вам нужно убедиться, что Python ищет в соответствующем пространстве имен. Просто добавьте self..

class c():

    def __init__(self):
        self.f()  # <-

    @staticmethod
    def f():
        print("f called")

c()

Результаты в

f called
0 голосов
/ 06 мая 2019

Поскольку f() является методом класса, вы можете использовать c.f() или self.f() для его вызова

class c():

    def __init__(self):
        #Call static method using classname
        c.f()
        #Call static method using self
        self.f()

    @staticmethod
    def f():
        print("f called")

c()

Тогда вывод будет

f called
f called

Аналогично для вызова статического метода вне класса, мы можем использовать ClassName или Instance

#Using classname to call f
c.f()

#Using instance to call f
c().f()

Вывод будет

f called
f called
...