Python 3.4: можно ли вызывать статические методы только из экземпляра? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь вызвать метод @staticmethod из класса, чтобы инициализировать переменную класса, как показано здесь:

class Test:
    @staticmethod
   def get_bit_count():
       return 8
   num = get_bit_count()

Но это немедленно приводит к следующей ошибке: TypeError: 'staticmethod' object is not callable.

Однако следующий код работает просто отлично:

class Test:
    @staticmethod
    def get_bit_count():
        return 8
    num = None
    def __init__(self):
        self.num = self.get_bit_count()

print(Test.get_bit_count())
print(Test().num)

Метод может быть вызван и переменная num будет правильно установлена ​​со следующим выводом:

8
8

Нос этим кодом мне теперь нужно создать экземпляр класса, чтобы сделать это.

Есть ли способ, позволяющий мне использовать Test.num и получать 8 не None без создания экземпляра класса?Я хочу сделать это, чтобы избежать избыточности, имея только одну переменную в методе get_bit_count(), которую можно изменить при желании обновить мой код.

1 Ответ

1 голос
/ 05 апреля 2019

Статические методы, как указано в документации для staticmethod , могут вызываться только для класса или экземпляра.

Вы можете использовать обычный метод, хотя. Если вы хотите иметь возможность вызывать его также в экземпляре, просто позвольте ему принять любое количество аргументов:

class Test:
    def get_bit_count(*args, **kwargs):
        return 8

    num = get_bit_count()


print(Test.num)
# 8

t = Test()
print(t.get_bit_count())
# 8
...