自我在阶级要求的论证

时间:2011-10-19 00:06:28

标签: python class python-3.x self typeerror

由于某些原因,大多数类的实例都返回Type错误,表示传递的参数不足,问题出在self上。 这很好用:

class ExampleClass:
    def __init__(self, some_message):
        self.message = some_message
        print ("New ExampleClass instance created, with message:")
        print (self.message)
ex = ExampleClass("message")

然而,几乎所有其他类我定义并调用一个实例返回相同的错误。几乎相同的功能:

class Test(object):
    def __init__(self):
        self.defaultmsg = "message"
    def say(self):
        print(self.defaultmsg)
test = Test
test.say()

返回一个Type Error,说它需要一个参数。我不仅仅是用这个类来解决这个问题,而且几乎每个我定义的类都有这个问题,我不知道问题是什么。我刚刚更新了python,但之前收到了错误。我对编程很新。

3 个答案:

答案 0 :(得分:4)

您必须实例化该类:

test = Test()   #test is an instance of class Test

而不是

test = Test     #test is the class Test
test.say()      #TypeError: unbound method say() must be called with Test instance as first argum ent (got nothing instead)

如果你很好奇,你可以试试这个:

test = Test
test.say(Test())     #same as Test.say(Test()) 

它有效,因为我将类实例(self)赋予了未绑定的方法!
绝对不建议以这种方式编码。

答案 1 :(得分:2)

您应该添加括号来实例化一个类:

test = Test()

答案 2 :(得分:1)

您的测试是指类本身,而不是该类的实例。要创建实际的测试实例,或“实例化”它,请添加括号。例如:

>>> class Foo(object):
...   pass
... 
>>> Foo
<class '__main__.Foo'>
>>> Foo()
<__main__.Foo object at 0xa2eb50>

错误消息试图告诉您没有这样的self对象作为函数参数传递(隐式),因为在您的情况下test.say将是一个未绑定的方法。