2010-10-28 10 views
1

может кто-нибудь объяснить, что с ним не так? Я делаю что-то неправильно ?python: слишком много предоставленных параметров

>>> class qw: 
...  def f2x(par1, par2, par3): 
...    print par1, par2, par3 
... 
>>> obj = qw() 
>>> obj.f2x("123", 13, "wert") Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: f2x() takes exactly 3 arguments (4 given) 
>>> 

если я определю только функцию это все работает нормально

>>> def f2x(par1, par2, par3): 
...  print par1, par2, par3 
... 
>>> f2x("1", 2, "too many") 
1 2 too many 
>>> 
+0

ли вы 'self' как первый аргумент в вашей функции декларации до или после ответа пришел к этому вопрос? У вас все еще есть проблемы? –

+0

не могли бы вы отредактировать вопрос до его первоначальной формы, чтобы ответы имели смысл? – 2010-10-28 16:24:12

ответ

2

Я думаю, его из-за каждый метод объекта класса питона неявно имеет первый параметр Я, который указует на самом объект.

попробовать

def f2x(self, par1, par2, par3): 

вы до сих пор называют его с 3 пользовательских параметров

>>> class qw: 
...  def f2x(self, p1, p2, p3): 
...    print p1,p2,p3 
... 
>>> o = qw() 
>>> o.f2x(1,2,3) 
1 2 3 
+0

спасибо всем за ваши ответы, проблема решена – m1k3y3

+0

Я думаю, вы имеете в виду «явно»? –

4

Вы забыли, что все функции-члены получить еще один аргумент неявно, что в Python называется self по соглашению.

Try:

class qw: 
    def f2x(self, par1, par2, par3): 
    print par1, par2, par3 

Но до сих пор называют его, как и раньше:

obj = qw() 
obj.f2x("123", 13, "wert") 

В f2x, self является объект, на котором был назван членом. Это очень фундаментальная концепция Python, о которой вы должны действительно узнать.

4

Вам нужен параметр self в вашем определении класса метод экземпляра:

class qw: 
    def f2x(self, par1, par2, par3): 
     print par1, par2, par3 

Я предлагаю идти через начинающий Python книги/Учебник. standard tutorial - хороший выбор, особенно если у вас уже есть опыт работы на другом языке.

Тогда вы называете это так:

g = qw() 
g.f2x('1', '2', '3') 
+0

@ m1k3y02: какой питон вы используете? он отлично работает на моей машине после добавления параметра self. –

+0

2.6.5, после повторного входа в командную строку python все начали работать так, как предполагается, спасибо за вашу помощь – m1k3y3

Смежные вопросы