Проходя 1 аргумент, и он говорит, что я прохожу 2 - PullRequest
0 голосов
/ 25 декабря 2010
import os
import sys

class Corrector:

    def correctAll(dir):
        print "ok"

c = Corrector()
c.correctAll(os.getcwd())

Этот код печатает:

TypeError: correctAll () принимает ровно 1 аргумент (задано 2)

, но AFAIK os.getcwd() возвращает одинстрока .. что здесь не так?

Ответы [ 4 ]

4 голосов
/ 25 декабря 2010

Вам необходимо принять self в качестве аргумента или использовать декоратор staticmethod.

class Corrector:

    def correctAll(self, dir):
        print "ok"

или

class Corrector:

    @staticmethod
    def correctAll(dir):
        print "ok"

Различие между ними заключается в том, что вы хотите, чтобы метод имел доступ к экземпляру, к которому он обращен, или нет. Если это так, то используйте первый, и экземпляр будет доступен как self. В противном случае вы можете использовать второй.

Методы Python работают, явно принимая объект, с которым они связаны, в качестве первого аргумента (self здесь каноничен, но на самом деле может быть чем угодно) Этот аргумент затем неявно передается, когда происходит вызов.

1 голос
/ 25 декабря 2010

В python вы должны явно принимать аргумент экземпляра - называемый self - (в то время как другие языки просто предоставляют его автоматически).Таким образом, определение вашего метода должно выглядеть как def correctAll(self, dir).

1 голос
/ 25 декабря 2010

В вашем correctAll отсутствует параметр self: все методы экземпляра должны иметь self в качестве первого аргумента, это означает «сам объект». Другими словами, c.correctAll(x) похоже на Corrector.correctAll(c, x)

Пример оболочки Python

>>> class Test:
...   def doSomething(s, x): print x
... 
>>> Test().doSomething(1)
1
>>> Test.doSomething(Test(), 1)
1
>>> Test()
<__main__.Test instance at 0xb7793acc>
>>> 

Рабочий код:

import os
import sys

class Corrector:

    def correctAll(self, dir):
        print "ok"

c = Corrector()
c.correctAll(os.getcwd())

См. Также: http://docs.python.org/tutorial/classes.html

0 голосов
/ 25 декабря 2010

Разве вы не должны определять self в списке аргументов?

class Corrector:

    def correctAll(self, dir):
        print "ok"

Может быть, я ошибаюсь ...

...