2010-03-08 3 views
1

Я новый программист на Python, у которого проблемы с использованием «я» в классах. Например:Python 3.1.1 Вопрос класса

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

В этой функции я хочу, чтобы таблица была переменной, хранящейся в данных класса, и используйте add для ее изменения. Однако, когда я запускаю этот скрипт дает мне ошибку:

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) 

Я предполагаю, что я пытаюсь вызвать функцию неправильного пути в этом случае, как этот синтаксис очень похож на пример в документации питона : http://docs.python.org/3.1/tutorial/classes.html

ответ

8

Сначала необходимо сделать экземпляр класса:

mydata = data() 

затем вы можете вызвать метод - на экземпляр, конечно, не на классе:

mydata.add('yes') 
2

Вам нужно создать экземпляр класса, прежде чем вы можете вызвать его методы:

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

Вы пытаетесь вызвать data.add(), как вы бы назвали статический метод в Java. Попробуйте сделать это вместо:

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

Параметр self указывает метод, который она действует на объект типа data.

2

Вы вызываете метод add для объекта класса, а не экземпляр класса.

Похоже, что вы хотите сделать, это:

classInst = данные() #make экземпляра

classInst.add ("вещи") #call методом

Когда надстройка является вызывается в объекте экземпляра, объект экземпляра передается в качестве аргумента self методу. Наличие аргумента self отличает методы класса от методов экземпляра.