Я в классе требовательный аргумент - PullRequest
0 голосов
/ 19 октября 2011

По какой-то причине большинство экземпляров классов возвращают ошибки типа, говорящие о том, что передано недостаточно аргументов, проблема связана с 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()

Возвращает ошибку типа, говоря, что ей нужен аргумент.Я получаю эту проблему не только с этим классом, но почти со всеми классами, которые я определяю, и я понятия не имею, в чем проблема.Я только что обновил python, но раньше получал ошибку.Я довольно новичок в программировании.

Ответы [ 3 ]

4 голосов
/ 19 октября 2011

Вы должны создать экземпляр класса:

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) несвязанному методу!
Абсолютно не рекомендуется кодировать таким образом.

2 голосов
/ 19 октября 2011

Вы должны добавить скобки для создания экземпляра класса:

test = Test()
1 голос
/ 19 октября 2011

Ваш тест относится к самому классу, а не к экземпляру этого класса. Чтобы создать реальный экземпляр теста или «создать его экземпляр», добавьте скобки. Например:

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

Сообщение об ошибке пыталось сообщить вам, что не было такого self объекта, который бы передавался (неявно) в качестве аргумента функции, потому что в вашем случае test.say будет несвязанным методом.

...