2010-03-08 7 views
1

Je suis un nouveau programmeur Python qui a un peu de mal à utiliser 'self' dans les classes. Par exemple:Python 3.1.1 Classe Question

class data: 
    def __init__(self): 
     self.table = [] 
    def add(self, file): 
     self.table.append(file) 
data.add('yes') 

Dans cette fonction que je veux avoir la table une variable stockée dans les données de classe et utiliser ajouter à la modifier. Cependant, quand je lance ce script, il me donne l'erreur:

Traceback (most recent call last): 
    File "/Projects/Python/sfdfs.py", line 7, in <module> 
    data.add('yes') 
TypeError: add() takes exactly 2 positional arguments (1 given) 

Je suppose que je suis en train d'appeler la fonction dans le mauvais sens dans ce cas, que cette syntaxe est très similaire à un exemple dans la documentation python : http://docs.python.org/3.1/tutorial/classes.html

Répondre

8

vous devez d'abord faire une exemple de la classe:

mydata = data() 

alors vous pouvez appeler la méthode - sur le exemple, bien sûr, pas sur la classe:

mydata.add('yes') 
2

Vous devez instancier la classe avant de pouvoir appeler des méthodes sur elle:

mydata = Data() 
mydata.add('yes') 
1

Vous essayez d'appeler data.add() un peu comme vous appelleriez une méthode statique en Java. Essayez de faire ceci:

d = data() 
d.add('yes') 

Le paramètre self indique la méthode qu'il fonctionne sur un objet de type data.

2

Vous appelez la méthode add sur l'objet de classe pas une instance de la classe.

Il ressemble à ce que vous voulez faire est:

classInst = données() #make une instance

classInst.add ("substance") #CALL la méthode

Lorsque add est invoqué sur un objet d'instance, l'objet d'instance est transmis en tant qu'auto-argument à la méthode. Avoir l'argument self différencie les méthodes de classe des méthodes d'instance.