通过1个论点,它说我正在通过2

时间:2010-12-24 23:08:07

标签: python parameter-passing

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 个答案:

答案 0 :(得分:4)

您需要接受self作为参数或使用staticmethod装饰器。

class Corrector:

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

class Corrector:

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

两者之间的区别在于您是否希望该方法可以访问它所调用的实例。如果是,则使用第一个,实例将以self的形式提供。否则,您可以使用第二个。

Python方法通过明确地接受它们绑定的对象作为它们的第一个参数来工作(self在这里是规范的,但它确实可以是任何东西)。然后在发生调用时隐式传递该参数。

答案 1 :(得分:1)

您的correctAll缺少self参数:所有实例方法必须以self作为其第一个参数,它表示“对象本身” 换句话说,c.correctAll(x)就像Corrector.correctAll(c, x)

Python shell示例

>>> 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

答案 2 :(得分:1)

在python中,你必须接受实例参数 - 名为self - 显式(而其他语言只是自动提供它)。因此,您的方法定义必须类似于def correctAll(self, dir)

答案 3 :(得分:0)

你不应该在参数列表中定义self吗?

class Corrector:

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

也许我错了......