#python #class
#python #класс
Вопрос:
Я хотел бы вызвать переменную из classmethod в другой метод внутри того же класса:
class A():
@classmethod
def b(cls):
cls.g = 5
def c(self):
if self.g < 1:
print("TestA")
else:
print("TestB")
При выполнении:
x = A()
x.c()
Я получаю:
AttributeError: 'A' object has no attribute 'g'
Я читал и искал похожий случай, но не нашел его. Большинство имеет дело с вызовом переменных из метода init, и это здесь не применимо.
Комментарии:
1. Не уверен, почему я получил -1 на этот вопрос…
2. Вероятно, это произошло, потому что ваш вопрос очень простой. И ошибка, которую вы получили, уже отвечает на вашу проблему. Если чего-то нет
something else
в качестве атрибута, этоsomething else
не было добавлено. Тогда возникает проблема выяснить, почему она не была добавлена. Это было забыто? Она была добавлена в неправильном месте? Зависит ли это от порядка операций, который был выполнен неправильно …?3. Примечание: вы вызываете функции , а не переменные.
Ответ №1:
Если вы не запустите .b()
его заранее, ваш .g
не существует … вообще.
Добавьте __init__
функцию в свой класс и объявите .g
там, чтобы убедиться, что она хотя бы существует.
Комментарии:
1. Или просто добавьте a
g = None
в свой класс…2.
g = None
просто превратитAttributeError
в aTypeError
в Python 3, поскольку вы не можете сравнитьNone
с1
.3. Действительно, но это поможет определить и найти проблему.
Ответ №2:
Вы не определили g
как атрибут класса класса A
. Это можно сделать следующим образом:
class A():
g = 7
но тогда в вашем коде вы g
одновременно обрабатываете как instance ( self.g
), так и class variable ( cls.g
) . Хотя это работает ( self.g
будет ссылаться cls.g
), это может сбивать с толку.