Я новичок в Python, но застрял на этом, и, поскольку это кажется хорошим способом реализации полиморфизма, я хочу понять, почему код модели (то есть тот, который профессор использует в тексте) не работает в моей системе. Я сомневаюсь, что это ошибка в коде - скорее всего, системная несогласованность где-то с моей стороны. Спасибо, если кто-нибудь посмотрит на это.
Этот пример призван показать, как использовать классы и полиморфизм в контексте двухмерных случайных блужданий. Нижеприведенное будет иметь смысл, только если вы прочитаете код на страницах книги с 219 по 222 и поймете, что он пытается сделать. Я закодировал исходный код модели; продолжал получать ту же ошибку, поэтому скачал исходный код сайта и получил ту же ошибку. Ошибка возникает, когда Guttag определяет функции, которые принимают аргументы (которые кажутся неявно типа «класс»), называемые dClass. Код модели затем вызывает эти функции, передавая аргумент UsualDrunk (а затем и другие подклассы), который является определенным подклассом класса Drunk. Я вижу, как это должно работать: но при запуске ipython 7.2.0 или python 3.5.2 я получаю NameError: имя UsualDrunk не определено. Мне интересно, если я делаю что-то не так или моя версия Python несовместима с исходным кодом. Ubuntu Linux ввод / вывод:
$ ls
chapter14.py
$ ipython
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import chapter14
In [2]: chapter14.drunkTest((10,100,1000),1000,UsualDrunk)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-90a872f15ce9> in <module>
----> 1 chapter14.drunkTest((10,100,1000),1000,UsualDrunk)
NameError: name 'UsualDrunk' is not defined
Веб-страница книги, на которой указан исходный код: https://mitpress.mit.edu/books/introduction-computation-and-programming-using-python-revised-and-expanded-edition