我在同一个文件夹里有三个模块。在
第一个模块,运行.py,是主程序。在
第二个模块,叫做形状.py,包含一个名为“Shape”的类
第三个模块,叫做圆圈.py,它包含一个名为“Circle”的类,该类继承自Shape。在
代码编写如下
在运行.py在
from shapes import Shape from circles import Circle a = Circle() a.print_test()
在形状.py在
^{pr2}$在圆圈.py在
class Circle(Shape): def print_name(self): print "I am a circle"
我希望能够运行程序,并让控制台说“我是一个圆”,但它抛出了一个例外,当导入圆圈说“形状未定义”。在
我总能看出圆圈.py导入Shape类,但这不是我想要的。如果它们不在同一个文件夹里呢?如果有复杂的文件夹怎么办?在
这感觉就像我导入了两次图形模块,不必要的只是为了导入圆。在
我能做什么?(好吧,在这种情况下,运行.py可能甚至不需要导入形状,但如果我有其他模块“三角形”、“六边形”和“五边形”,我不希望它们都必须导入形状)
编辑:我也可以把它们放在同一个模块里,因为它们都是形状!但这种问题迟早会出现的。在
从
circles.py
内导入shapes
:在Python中,每个模块必须
import
任何它需要的东西。它不能依赖任何其他模块来为它进行导入。在您需要导入python模块中使用的所有类。在第一个模块(
run.py
)中,没有使用Shape
,只使用了Circle
,因此可以在那里省略它。run.py
根本不需要知道Circle
是如何定义的。在但是,在
circles.py
中,您确实需要导入shapes
,因为您的Circle
类基于Shape
类,因此它需要访问那里的定义。在我建议您使用pyflakes这样的工具来检查文件中是否存在以下错误。您可以将这样一个脚本与自动运行的各种编辑器连接起来,在保存python文件时提供即时反馈。在
我想你必须初始化circle类中的shapes超类。您可以通过构造函数来实现这一点。所以在你的圆.py类您需要以下内容:
马格努斯·利赫特兰的书《开始Python:从新手到专业人士》很好地涵盖了这一领域。在
相关问题 更多 >
编程相关推荐