Как уже говорилось, просто переместите self.info = {}
в __init__()
.
__init__()
по сути является конструктором, с которым вы знакомы из java. Он инициализирует экземпляр объекта этого класса при вызове. Я не использовал Java какое-то время, но я не думаю, что вам следует объявлять переменные класса вне вашего конструктора.
self
— это аргумент, который все методы внутри класса в Python должны получить в качестве своего первого аргумента. Так что ваши геттеры и сеттеры тоже не сработают, если вы их попробуете; они должны быть:
def setInfo(self, info)
и def getInfo(self)
Когда вы создаете объект, например:
device1 = device_info()
он вызывает __init()__
, передавая device1
как self
. Затем всякий раз, когда вы используете этот объект, например
device1.setInfo(newInfo)
, вы можете думать о методе в контексте класса, вызываемом как setInfo(device1, newInfo)
, поскольку device1
это self
, или текущий используемый экземпляр объекта device_info
.
Вам также не нужен аргумент object
в определении класса. Что вы ожидаете от этого?
Редактировать: на самом деле не перемещайте self.info = {}
в __init__()
, просто избавьтесь от него. У вас уже есть self.info = info
в __init__()
. Вам не нужно инициализировать такие переменные в Python, как в Java. Создание пустого dict
, а затем установка его на другой dict
без какого-либо использования является излишним.
person
pretzlstyle
schedule
19.07.2016
self.info = {}
в__init__
. Не думайте оself
как о каком-то волшебном ключевом слове, это просто еще один аргумент, он не определен вне метода, который получает его в качестве входных данных (например,__init__
) - person pretzlstyle   schedule 19.07.2016self
— это Python-версияthis
@jphollowed - person B Welch   schedule 19.07.2016this
, но в python его следует использовать более явно, и все функции в классе должны приниматьself
в качестве первого аргумента. уточню в ответе - person pretzlstyle   schedule 19.07.2016