Если вы хотите создать переменную класса , вы должны объявить его вне методов класса (но все еще внутри определения класса):
class Example(object):
somevariable = 'class variable'
С помощью этого вы можете получить доступ к переменной класса.
>> Example.somevariable
'class variable'
Причина, почему ваш пример не работает, потому что вы присваиваете значение к instance
переменной.
Разница между двумя заключается в том, что переменная class
создается, как только объект класса создается. В то время как переменная instance
будет создана после того, как объект был создан и только после того, как они были назначены.
class Example(object):
def doSomething(self):
self.othervariable = 'instance variable'
>> foo = Example()
Здесь мы создали экземпляр Example
, однако, если мы попытаемся получить доступ к othervariable
мы получим ошибку:
>> foo.othervariable
AttributeError: 'Example' object has no attribute 'othervariable'
С othervariable
назначенную внутри doSomething
- и мы не под названием ityet - , этого не существует.
>> foo.doSomething()
>> foo.othervariable
'instance variable'
__init__
это специальный метод, который автоматически вызывается, когда класс экземпляра происходит.
class Example(object):
def __init__(self):
self.othervariable = 'instance variable'
>> foo = Example()
>> foo.othervariable
'instance variable'
'self.somevariable' - это переменная экземпляра, а не переменная класса. –
Чтобы понять это, вы должны понимать, что класс 'example' является объектом, но он имеет тип' type', а не тип 'example'. Каждый _instance_ класса 'example', который вы создаете с помощью, например,' inst = example() ', является объектом типа' example'. Ваш код создает атрибут 'somevariable' в каждом объекте типа' example'. – abarnert