Je suis nouveau sur python et j'ai heurté un mur. J'ai suivi plusieurs tutoriels mais je ne peux pas surmonter 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 il ne semble pas y avoir de différence avec 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
python
python-3.x
DominicM
la source
la source
Vous devez d'abord l'initialiser:
la source
Fonctionne et est plus simple que toutes les autres solutions que je vois ici:
C'est très bien si vous n'avez pas besoin de réutiliser une instance de classe. Testé sur Python 3.7.3.
la source
Vous pouvez également obtenir cette erreur en suivant prématurément les conseils de PyCharm pour annoter une méthode @staticmethod. Supprimez l'annotation.
la source
Le mot clé 'self' en python est analogue au mot clé 'this' en c ++ / java / c #.
En python 2, cela se fait implicitement par le compilateur
(yes python does compilation internally)
. C'est juste qu'en python 3 vous devez le mentionnerexplicitly
dans les fonctions constructeur et membre. exemple:la source