Jupyter & Python:为什么 child 对 parent 方法的调用无法识别 parent 的导入?

Jupyter & Python: Why can't a child's call to a parent method recognize the parent's import?

在我当前的工作目录中,我有文件 active.ipynb,其中包含 class B,A 的子 class,并且我有 A.py,其中定义了 A。

当我在笔记本中定义所有内容时(即 class A 和 B 都在笔记本的一个单元格中定义),一切正常,这正是我所期望的。当 class A 移入它自己的文件时,我遇到了问题。在 class 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

怎么回事?

刚才不小心重复了错误才弄明白的,现在可以随意复制了。

我从 JN 复制了 class A,不小心错过了模块级别的数学导入。然后我将 class A 导入到一个新的单元格中并调用它的方法导致引用数学模块的名称错误。这是预料之中的,因为我没有在任何地方导入数学。

我将数学导入添加到 A.py,保存它,然后假设它会使用新信息重新导入 A.py 重新运行单元格。不是这种情况。我清空笔记本的时候才发现我更新了A.py.

显然,即使您始终马虎,保持一致也是一种福音。