您如何从不同文件的子类内部访问超类?
How can you a access a superclass from inside a subclass in different a file?
我正在尝试在名为 main.py 的脚本中创建子 class 的实例。 subclass 及其关联的 superclass 每个都位于子目录中的单独文件中。文件结构如下:
- main.py
- 协议
- protocol.py(里面是一个superclass命名协议)
- MovingBar.py(里面是一个名为 MovingBar 的子class)
在 main.py 中,我可以使用 from protocols.protocol import protocol
加载协议 superclass 使用这种方法,我可以毫无问题地生成 superclass 的实例。
但是,当我下次尝试使用 from protocols.MovingBar import MovingBar
加载 MovingBar subclass 时,出现以下错误
NameError: 名称 'protocol' 未定义
据推测,这是因为我在 MovingBar 的 class def 中引用了协议,如下所示:
class MovingBar(protocol):
def __init__(self):
super().__init__()
我不确定为什么 python 可以识别 main.py 文件中对协议的引用,但在 MovingBar 文件中却不能。有没有一种导入协议的方法,以便在我随后导入 MovingBar 时可以看到它?
您的 MovingBar.py
中需要 from protocol import protocol
。模块不继承其调用者的全局环境。
我正在尝试在名为 main.py 的脚本中创建子 class 的实例。 subclass 及其关联的 superclass 每个都位于子目录中的单独文件中。文件结构如下:
- main.py
- 协议
- protocol.py(里面是一个superclass命名协议)
- MovingBar.py(里面是一个名为 MovingBar 的子class)
在 main.py 中,我可以使用 from protocols.protocol import protocol
加载协议 superclass 使用这种方法,我可以毫无问题地生成 superclass 的实例。
但是,当我下次尝试使用 from protocols.MovingBar import MovingBar
加载 MovingBar subclass 时,出现以下错误
NameError: 名称 'protocol' 未定义
据推测,这是因为我在 MovingBar 的 class def 中引用了协议,如下所示:
class MovingBar(protocol):
def __init__(self):
super().__init__()
我不确定为什么 python 可以识别 main.py 文件中对协议的引用,但在 MovingBar 文件中却不能。有没有一种导入协议的方法,以便在我随后导入 MovingBar 时可以看到它?
您的 MovingBar.py
中需要 from protocol import protocol
。模块不继承其调用者的全局环境。