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