Импорт классов из отдельных файлов - PullRequest
4 голосов
/ 20 февраля 2012

Так что я работаю над знакомством с объектно-ориентированным программированием, возиться с классами в python. Ниже приведен простой код, который я [пытался] реализовать только в интерпретаторе.

class Test(object):

    def set_name(self, _name):
        name = _name

    def set_age(self, _age):
        age = _age

    def set_weight(self, _weight):
        weight = _weight

    def set_height(self, _height):
        height = _height

Когда я запускаю python, я запускаю следующие команды:

>>>import Test
>>>Test.set_name("Sean")

и затем я получаю эту трассировку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'set_name'

Я основываюсь на официальной документации модуля, найденной здесь .

Я прочитал довольно много документации по ООП, но я все еще новичок, так что я уверен, что что-то происходит прямо над моей головой. Что означает эта ошибка?

Заранее спасибо за любую помощь.

1 Ответ

6 голосов
/ 20 февраля 2012

Похоже, вы импортируете модуль Test. У вас есть класс с именем Test внутри модуля с именем Test?

Если это так, вам нужно импортировать класс напрямую как from Test import Test или, если вы просто хотите импортировать модуль, вы должны ссылаться на свой класс как Test.Test.

РЕДАКТИРОВАТЬ: Об ошибке unbound method set_name(). Вам нужно вызвать метод set_name для экземпляра класса, а не напрямую для класса. Test().set_name("Sean") будет работать (обратите внимание на () после Test, который создает экземпляр).

Метод set name ожидает экземпляр класса Test в качестве первого аргумента (self). Таким образом, метод вызовет ошибку, если он не вызывается для экземпляра. Есть способы вызвать его напрямую из класса, явно указав экземпляр в качестве первого параметра.

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