import os
import sys
class Corrector:
def correctAll(dir):
print "ok"
c = Corrector()
c.correctAll(os.getcwd())
此代码正在打印:
TypeError:correctAll()完全取 1个参数(给出2个)
但是AFAIK os.getcwd()
会返回一个字符串..这里有什么问题?
答案 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())
答案 2 :(得分:1)
在python中,你必须接受实例参数 - 名为self
- 显式(而其他语言只是自动提供它)。因此,您的方法定义必须类似于def correctAll(self, dir)
。
答案 3 :(得分:0)
你不应该在参数列表中定义self
吗?
class Corrector: def correctAll(self, dir): print "ok"
也许我错了......