init () отсутствует 1 обязательный позиционный аргумент

Я пытаюсь изучить Python. Это очень простой код. Все, что я пытаюсь сделать здесь, это вызвать конструктор класса. Инициализируйте некоторые переменные и распечатайте эту переменную. Но это дает мне ошибку. Он говорит:

отсутствует 1 обязательный позиционный аргумент

вот мой код:

class DHT:
    def __init__(self, data):
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__': DHT().showData()

4 ответов


вы получаете эту ошибку, потому что вы не прошли data переменная конструктора DHT.

ответы айкида и Александра хороши, но это не сработает, потому что вам все равно нужно инициализировать self.data в конструкторе класса, как это:

class DHT:
   def __init__(self, data={}):
      self.data = data
      self.data['one'] = '1'
      self.data['two'] = '2'
      self.data['three'] = '3'
   def showData(self):
      print(self.data)

и затем вызывая showData такой способ:

DHT().showData()

или такой:

DHT({'six':6,'seven':'7'}).showData()

или такой:

# Build the class first
dht = DHT({'six':6,'seven':'7'})
# The call whatever method you want (In our case only 1 method available)
dht.showData()

ваш конструктор ожидает один параметр (данные). Ты не передашь его по телефону. Я думаю, вы хотели инициализировать поле в объекте. Это выглядело бы так:

class DHT:
    def __init__(self):
        self.data = {}
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__':
    DHT().showData()

или даже так:

class DHT:
    def __init__(self):
        self.data = {'one': '1', 'two': '2', 'three': '3'}
    def showData(self):
        print(self.data)

вам нужно передать в него некоторые данные. Например, пустой словарь.

if __name__ == '__main__': DHT('a').showData()

однако в вашем примере параметр даже не требуется. Вы можете объявить это просто:

def __init__(self):

может быть, вы хотите установить его из данных?

class DHT:
    def __init__(self, data):
        self.data['one'] = data['one']
        self.data['two'] = data['two']
        self.data['three'] = data['three']
    def showData(self):
        print(self.data)

if __name__ == '__main__': DHT({'one':2, 'two':4, 'three':5}).showData()

showData будет печатать данные, которые вы только что ввели.


возможно, вы должны сделать data параметр ключевого слова со значением по умолчанию пустого словаря:

class DHT:
    def __init__(self, data=dict()):
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__': 
    DHT().showData()