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

我不知道我做错了什么,任何帮助将不胜感激。

4

2 回答 2

2

该错误告诉您f()必须在type的实例MyClass上调用,而不是在MyClass其自身上调用。

您需要创建一个实例MyClass

obj = MyClass()

在这种情况下obj将是MyClass.

然后你需要调用f()那个对象:

obj.f()

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

def f(self):
    ...

selfobj在您调用时引用obj.f()

知道这一点,如果您再看一下错误消息:

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

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

于 2013-03-26T06:15:01.973 回答
2

做这个:

myCls = MyClass()
myCls.f()

当你像静态函数一样调用它时错误说你的方法需要实例你可以在方法部分的教程中阅读更多关于python类的信息

于 2013-03-26T06:09:00.877 回答