Как переменная экземпляра будет использоваться в методе класса?

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

Очень упрощенно, вот что я пытаюсь сделать:

class Test:

  def __init__(self, a):
    self.a = a

  @classmethod
  def calculate(cls, b):
     return self.a + b

2 ответа

Решение

все, что я хочу, это объявить переменную 'a', а затем использовать ее в методе класса для целей расчета.

Если вы хотите кэшировать общеклассовое значение, это ваши основные параметры:

Установите значение явно:

class Foo:
    @classmethod
    def set_foo(cls):
        print('Setting foo')
        cls.foo = 'bar'

    def print_foo(self):
        print(self.__class__.foo)

Foo.set_foo()      # => 'Setting foo'
Foo()
Foo().print_foo()  # => 'bar'

Установите значение в классе init:

class Foo:
    print('Setting foo')
    foo = 'bar'

    def print_foo(self):
        print(self.__class__.foo)
# => 'Setting foo'

Foo()
Foo()
Foo().print_foo()  # => 'bar'

Установите значение в первом экземпляре init:

class Foo:
    def __init__(self):
        if not hasattr(self.__class__, 'foo'):
            print('Setting foo')
            self.__class__.foo = 'bar'

    def print_foo(self):
        print(self.__class__.foo)

Foo()              # => 'Setting foo'
Foo()
Foo().print_foo()  # => 'bar'

Если вы хотите использовать пространство имен @staticmethod вместо этого, и пусть пользователи передают переменные, например, Test.calculate(a, b)

Другие вопросы по тегам