在我班级中调用一个函数是行不通的

时间:2013-03-26 06:08:06

标签: python class function

class MyClass(object):
    def f(self):
        return 'hello world'

我一直在这里和其他网站上阅读的所有内容使用此代码,如果我运行MyClass.f(),它应该返回hello world,但我会继续

Traceback (most recent call last):
  File "C:\Users\Calvin\Desktop\CS_Semester_Project\testing.py", line 5, in <module>
    MyClass.f()
TypeError: unbound method f() must be called with MyClass instance as first argument (got nothing instead)

我不知道我做错了什么,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这样做:

myCls = MyClass()
myCls.f()

当你把它作为一个静态函数调用它时,错误说你f方法需要实例 您可以在about python classes in tutorial

中阅读更多methods section

答案 1 :(得分:1)

错误告诉您必须在f()类型的实例上调用MyClass,而不是MyClass本身。

您需要创建MyClass的实例:

obj = MyClass()

在这种情况下,obj将是MyClass的实例。

然后你需要在该对象上调用f()

obj.f()

由于在Python中调用方法的方式,错误消息令人困惑。当您致电obj.f()时,obj会隐式传递给f()作为第一个参数。这就是你必须写

的原因
def f(self):
    ...
当您致电self时,

obj会引用obj.f()

知道如果你再看一下错误信息:

TypeError: unbound method f() must be called with MyClass instance as first argument (got nothing instead)

这更有意义。它说f()期待一个参数,(特别是MyClass的一个实例)并没有得到一个,因为试图在类型上调用它而不是类型的实例