【发布时间】:2011-07-07 20:02:28
【问题描述】:
我在同一个文件夹中有三个模块。
第一个模块,run.py,是主程序。
第二个模块,称为shapes.py,包含一个名为“Shape”的类
第三个模块,称为 circles.py,包含一个名为“Circle”的类,该类继承自 Shape。
代码编写如下
运行.py
从形状导入形状 从圈子导入圈子 a = 圆() a.print_test()shapes.py
类形状(对象): def print_name(self): 打印“我是一个通用形状”circles.py
类圆(形状): def print_name(self): 打印“我是一个圆圈”我希望能够运行程序并让控制台说“我是一个圆圈”,但是在导入圆圈时会抛出一个异常,说“形状未定义”。
我总是可以告诉 circles.py 导入 Shape 类,但这不是我想要的。如果它们不在同一个文件夹中怎么办?如果文件夹层次结构复杂怎么办?
感觉就像我以这种方式不必要地导入了两次形状模块,只是为了导入圆圈。
我能做什么? (好吧,在这种情况下,run.py 可能甚至不需要导入 Shape,但如果我有一些其他模块“三角形”、“六边形”和“五边形”,我不希望它们都必须导入形状)
编辑:我也可以将它们全部放在同一个模块中,因为它们是形状!但这种问题可能会在一段时间内出现。
【问题讨论】:
-
“我总是可以告诉 circles.py 导入 Shape 类,但这不是我想要的。”那么 Python 不适合你。
-
我的设计最终会有“三角形”和“六边形”以及许多其他形状,它们都将继承 Shape。但随后我可能会将shapes.py 移动到另一个文件夹,这意味着我必须去更改所有的导入语句。我想避免进行此类更改。
-
@Keikoku: 如果
Circle应该是Shape,那么它必须知道Shape是什么——否则,它应该如何继承它?! -
@katrielalex,想法是让 run.py 导入它,这样圆圈就不必导入它,因为我可以有三角形和六边形,但这种方法可能行不通还有另一种方法。
-
@Keikoku:但
run.py知道Shape是什么并不意味着circles.py知道Shape是什么。这就是 Python 的工作原理。
标签: python python-import