Я думаю, что вы изменили исходный код и не перегружается модуль:
Buggy версия:
class Cow():
def __init__(self, name):
if self.name == None:
raise NoNameCowError("Your cow must have a name")
def speak(self):
print self.name, "says moo"
>>> import so
Ошибка поднятый, как и ожидалось:
>>> so.Cow('abc1')
Traceback (most recent call last):
File "<ipython-input-4-80383f90b571>", line 1, in <module>
so.Cow('abc1')
File "so.py", line 3, in __init__
if self.name == None:
AttributeError: Cow instance has no attribute 'name'
Теперь давайте изменим источник код и добавить эту строку self.name = name
:
>>> import so
>>> so.Cow('abc1')
Traceback (most recent call last):
File "<ipython-input-6-80383f90b571>", line 1, in <module>
so.Cow('abc1')
File "so.py", line 3, in __init__
self.name = name
AttributeError: Cow instance has no attribute 'name'
eh! еще такая же ошибка? Это связано с тем, что python все еще использует старый файл .pyc
или объект кэшированного модуля. Просто загрузите модуль и обновленный код работает отлично:
>>> reload(so)
<module 'so' from 'so.py'>
>>> so.Cow('dsfds')
<so.Cow instance at 0x8b78e8c>
От docs:
Примечание По соображениям эффективности, каждый модуль импортируется только один раз в переводчика сессии. Поэтому, если вы меняете свои модули, вы должны перезапустить интерпретатор - или, если это всего лишь один модуль, который вы хотите протестировать в интерактивном режиме, используйте reload()
, например. reload(modulename)
.
Лучший вариант кода:
class Cow():
def __init__(self, name=None): #Use a default value
self.name = name
if self.name is None: #use `is` for testing against `None`
raise NoNameCowError("Your cow must have a name")
Работает как следует. Кроме того: ваш код не вызывает словосочетание(). Вы лжете о том, что делаете, и о своем коде. –
Ваш текущий код выглядит хорошо, попробуйте перезагрузить модуль или удалить файл 'cow.pyc' и повторите попытку. –
Ваша программа неполна, и многие люди догадываются, в чем проблема.Пожалуйста, предоставьте краткую, полную программу, демонстрирующую ошибку. Скопируйте-вставьте (не перепечатывайте) программу и ее вывод и, пожалуйста, сообщите о своем ожидаемом выходе. См. Http://SSCCE.ORG для получения дополнительной информации. –