Jupyter & Python: Почему при вызове дочернего элемента родительского метода не может быть распознан родительский метод? - PullRequest
0 голосов
/ 12 февраля 2019

В моем текущем рабочем каталоге у меня есть файлы active.ipynb, который содержит класс B, подкласс A, и у меня есть A.py, где определен A.

Когда я определяю все в записной книжке (т. Е. Класс A и B определяются в ячейке записной книжки), все отлично работает, чего я и ожидаю.Когда класс А перемещается в собственный файл, у меня возникают проблемы.Импорт математики в классе B не помогает, и я также проверил это в отдельном блокноте из моего реального проекта, чтобы убедиться, что я не делаю что-то вредное.

Рассмотрим

A.pyсодержание:

#edited to reflect this issue occurring regardless of import location

import math    

class A:

    def method(self):
        #parent related code...
        self.parentmethod()

    def parentmethod(self):
        print(math.pi)

В моей текущей ячейке у меня есть:

import A


class B(A.A):
    def method(self):
        #child related overridden code...
        self.parentmethod()

b = B()

b.method()

, и я получаю следующую ошибку:

NameError                                 Traceback (most recent call last)
<ipython-input-84-42c1e6969f03> in <module>
      9 b = B()
     10 
---> 11 b.method()

<ipython-input-84-42c1e6969f03> in method(self)
      5     def method(self):
      6         #child related code...
----> 7         self.parentmethod()
      8 
      9 b = B()

~\Documents\Projects\FunctionNetwork\A.py in parentmethod(self)
      7 
      8     def parentmethod(self):
----> 9         print(math.pi)

NameError: name 'math' is not defined

Что происходит?

1 Ответ

0 голосов
/ 13 февраля 2019

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

Я скопировал класс A из JN и случайно пропустил импорт математики на уровне модуля.Затем я импортировал класс A в новую ячейку и вызвал его метод, который привел к ошибке имени, ссылающейся на математический модуль.Это ожидаемо, потому что я нигде не импортировал математику.

Я добавил импорт математики в A.py, сохранил его, а затем перезапустил ячейку, предполагая, что он повторно импортирует A.py с новой информацией.Это не вариант.Когда я очистил ноутбук, только тогда он узнал, что я обновил A.py.

Очевидно, что постоянство может быть благом, даже если вы постоянно неряшливы.

...