web-dev-qa-db-fra.com

__init __ () manquant 1 argument positionnel requis

J'essaie d'apprendre Python. Ceci est un code très simple. Tout ce que j'essaie de faire ici, c'est d'appeler le constructeur d'une classe. Initialisez là quelques variables et imprimez cette variable. Mais cela me donne une erreur. Il dit:

il manque 1 argument positionnel requis

Voici mon code:

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()
14
eddard.stark

Vous recevez cette erreur car vous n'avez pas transmis de variable data au constructeur DHT.

les réponses d'Aikid et d'Alexandre sont sympas mais ça ne marchera pas parce que vous devez encore initialiser self.data dans le constructeur de classe comme ceci:

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

Et puis appeler la méthode showData comme ceci:

DHT().showData()

Ou comme ça:

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

ou comme ça:

# 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()
8
Mike

Votre constructeur attend un paramètre (données). Vous ne le passez pas dans l'appel. Je suppose que vous vouliez initialiser un champ dans l'objet. Cela ressemblerait à ceci:

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()

Ou même simplement:

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

Vous devez lui transmettre des données. Un dictionnaire vide, par exemple.

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

Cependant, dans votre exemple, un paramètre n'est même pas nécessaire. Vous pouvez le déclarer simplement:

def __init__(self):

Peut-être voulez-vous le définir à partir des données?

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 imprimera les données que vous venez de saisir.

1
aIKid

Vous devriez éventuellement faire de data un paramètre de mot-clé avec une valeur par défaut de dictionnaire vide:

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()
1
Alexander Zhukov

Le problème est avec vous

def __init__(self, data):

lorsque vous créez un objet à partir de la classe DHT, vous devez passer le paramètre, les données doivent être de type dict, comme

data={'one':1,'two':2,'three':3}
dhtObj=DHT(data)

Mais dans votre code, vous devez changer

data={'one':1,'two':2,'three':3}
if __name__ == '__main__': DHT(data).showData()

Ou

if __name__ == '__main__': DHT({'one':1,'two':2,'three':3}).showData()
0
Eyasu