Ответ, в нескольких словах
В вашем примере itsProblem
является локальной переменной.
Вы должны использовать self
для установки и получения переменных экземпляра. Вы можете установить его в методе __init__
. Тогда ваш код будет:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Но если вы хотите истинную переменную класса, то используйте имя класса напрямую:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Но будьте осторожны с этим, поскольку theExample.itsProblem
автоматически устанавливается равным Example.itsProblem
, но это не та же самая переменная и может быть изменена независимо.
Некоторые пояснения
В Python переменные могут создаваться динамически. Поэтому вы можете сделать следующее:
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
отпечатков
Правда
Следовательно, именно это вы и делаете с предыдущими примерами.
Действительно, в Python мы используем self
как this
, но это немного больше. self
- это первый аргумент любого метода объекта, потому что первый аргумент всегда является ссылкой на объект. Это автоматически, называете ли вы это self
или нет.
Что означает, что вы можете сделать:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
или
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Это точно так же. Первый аргумент метода ЛЮБОГО объекта - это текущий объект, мы называем его self
как соглашение. И вы добавляете только переменную к этому объекту так же, как вы делаете это снаружи. 1050 *
Теперь о переменных класса.
Когда вы делаете:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Вы заметите, что мы сначала устанавливаем переменную класса , затем мы получаем доступ к переменной объекта (экземпляра) . Мы никогда не устанавливаем эту переменную объекта, но она работает, как это возможно?
Хорошо, Python сначала пытается получить переменную объекта, но если он не может ее найти, он выдаст вам переменную класса. Предупреждение: переменная класса является общей для экземпляров, а переменная объекта - нет.
В заключение, никогда не используйте переменные класса для установки значений по умолчанию для переменных объекта. Для этого используйте __init__
.
Со временем вы узнаете, что классы Python являются экземплярами и, следовательно, самими объектами, что дает новое понимание понимания вышеизложенного. Вернитесь и прочитайте это снова позже, как только вы поймете это.