Je suis nouveau sur python et je me suis heurté à un mur. J'ai suivi plusieurs tutoriels mais je ne peux pas dépasser l'erreur:
Traceback (most recent call last):
File "C:\Users\Dom\Desktop\test\test.py", line 7, in <module>
p = Pump.getPumps()
TypeError: getPumps() missing 1 required positional argument: 'self'
J'ai examiné plusieurs tutoriels, mais rien ne semble différent de mon code. La seule chose à laquelle je peux penser est que python 3.3 nécessite une syntaxe différente.
scipt principal:
# test script
from lib.pump import Pump
print ("THIS IS A TEST OF PYTHON") # this prints
p = Pump.getPumps()
print (p)
Classe de pompe:
import pymysql
class Pump:
def __init__(self):
print ("init") # never prints
def getPumps(self):
# Open database connection
# some stuff here that never gets executed because of error
Si je comprends bien, "self" est transmis automatiquement au constructeur et aux méthodes. Qu'est-ce que je fais mal ici?
J'utilise Windows 8 avec python 3.3.2
Vous devez instancier une instance de classe ici.
Utilisation
p = Pump()
p.getPumps()
Petit exemple -
>>> class TestClass:
def __init__(self):
print("in init")
def testFunc(self):
print("in Test Func")
>>> testInstance = TestClass()
in init
>>> testInstance.testFunc()
in Test Func
Vous devez d'abord l'initialiser:
p = Pump().getPumps()
Fonctionne et est plus simple que toutes les autres solutions que je vois ici:
Pump().getPumps()
C'est très bien si vous n'avez pas besoin de réutiliser une instance de classe. Testé sur Python 3.7.3.
Vous pouvez également obtenir cette erreur en prenant prématurément l'avis de PyCharm pour annoter une méthode @staticmethod. Supprimer l'annotation.
Le mot clé 'self' dans python est analogue à 'ceci' dans c ++/Java/c #.
Dans python 2, cette opération est effectuée implicitement par le compilateur (yes python does compilation internally)
. C'est juste que dans python 3, vous devez le mentionner explicitly
dans les fonctions constructeur et membre. exemple:
class Pump():
//member variable
account_holder
balance_amount
// constructor
def __init__(self,ah,bal):
| self.account_holder = ah
| self.balance_amount = bal
def getPumps(self):
| print("The details of your account are:"+self.account_number + self.balance_amount)
//object = class(*passing values to constructor*)
p = Pump("Tahir",12000)
p.getPumps()