给出以下文件结构:
Car/
__input__.py
Line.py
Country.py
Line.py包含一个类:
class Line:
def __init__(self,name):
self.name = name
我知道我可以使用班级' Line'用这样的东西:
from Car.Line import Line
line = Line("Chevy")
print str(line)
但是,出于各种原因,我希望能够在指定类名时使用固有的包导入路径,和希望我能够将所有内容都包含在包中,一举一动。
即,我希望能够做到这样的事情:
import Car
line = Car.Line("chevy")
country = Car.Country("chevy")
我猜这会奏效:
from Car.Line import Line as Car.Line
但这并不奏效:Python不喜欢别名中的点。
我已经尝试过其他一些事情,但未能想出我猜想应该做的事情。
我知道那里有关于所有课程是否应该能够进入单独的课程文件的讨论,而这并不是我真正想要实现的目标。我希望能够在文件系统中有用地隔离我的一些类,同时能够优雅地解决它们。
这是我可以用Python做的吗?我可以到那儿中途吗?
答案 0 :(得分:1)
一旦你了解了关于模块的简单事实,解决方案很简单:默认情况下,您在其中定义的所有名称都会导出以进行导入。实际上,您需要使用__all__
特殊名称来主动抑制此行为。
因此,要实现您想要的功能,您需要做的就是将所需内容导入Car
命名空间。这是由__init__.py
中的Car
形成的。
所以在这个文件中,你做
from .Line import Line
那就是它。我建议你看一下Python命名约定Pep8,并坚持下去。这意味着您的模块/包名称变为小写,并且许多其他提示使其他人(例如我在StackOverflow上)的理解更容易。