2013-03-26 6 views
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) 

Я понятия не имею, что я делаю неправильно, любая помощь будет очень оценена.

ответ

2

ли это:

myCls = MyClass() 
myCls.f() 

Как ошибки говорят вам е метод требует экземпляр в то время как вы называете его как статическая функция Вы можете прочитать больше about python classes in tutorial в methods section

+0

Пояснение: Функции, которые имеют «я» как первый аргумент, должны быть вызваны на объект в объекте. Функция ( – Patashu

+0

отлично работает, спасибо :) – Jackal

+0

@ Jackal приветствуется –

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) и не получил его, потому что пытался называть его типа, а не экземпляром типа.

Смежные вопросы