У новичка Python возникли проблемы с использованием классов - PullRequest
6 голосов
/ 10 февраля 2010

Я только начинаю немного возиться с классами; Однако я столкнулся с проблемой.

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

Предыдущий скрипт возвращает <unbound method MyClass.f> вместо намеченного значения. Как мне это исправить?

Ответы [ 2 ]

13 голосов
/ 10 февраля 2010

MyClass.f относится к функциональному объекту f, который является свойством MyClass. В вашем случае, f - это метод экземпляра (имеет параметр self), поэтому он вызывается для конкретного экземпляра. Он «не связан», потому что вы ссылаетесь на f без указания конкретного класса, вроде как на рулевое колесо без автомобиля.

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

x = MyClass()
x.f()

(указывает, из какого экземпляра вызывать f, поэтому вы можете ссылаться на переменные экземпляра и т. П.)

Вы используете f как static method. Эти методы не привязаны к определенному классу и могут ссылаться только на их параметры.

Статический метод будет создан и использован следующим образом:

class MyClass(object):
    def f():                 #no self parameter
        return 'hello world'
print MyClass.f()
6 голосов
/ 10 февраля 2010

Создайте экземпляр вашего класса: m = MyClass()

затем используйте m.f() для вызова функции

Теперь вы можете задаться вопросом, почему вам не нужно передавать параметр в функцию (параметр «self»). Это потому, что экземпляр, в котором вы вызываете функцию, фактически передается в качестве первого параметра.

То есть MyClass.f(m) равно m.f(), где m - это экземпляр объекта класса MyClass.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...