如何写python的代码拆分成多个文件?

How to write python code to be split into multiple files?

目前我有一个这样的 python 文件(非常简单):

u = 30
colors = ('blue', 'red')
grid = [0, 1]

class entity:
    def __init___(self, x, color)
        self.x = x
        self.color = color

    def move(self):
        print(grid[self.x + 1], self.color)
        

foo = entity(0, 'blue')
bar = entity(0, 'red')
while true:
    foo.move()
    bar.move()

我试着把它分开,我得到了这个:

# initialisation.py
u = 30
colors = ('blue', 'red')
# grid_map.py
from initialisation import u, colors
grid = [0, 1]
# classes.py
from map import u, colors, grid  # or *
class entity:
    def __init___(self, x, color)
        self.x = x
        self.color = color

    def move(self):
        print(grid[self.x + 1], self.color)

# objects.py
from classes import u, colors, grid, entity  # or *
foo = entity(0, 'blue')
bar = entity(0, 'red')
# main.py
from objects import u, colors, grid, entity, foo, bar  # or *
while true:
    foo.move()
    bar.move()

现在,我觉得我应该以一种不是从一个文件到下一个文件的导入链的方式导入,但我不确定具体如何导入。

(希望这是一个最小的、可重现的例子)

作为链导入是没有用的,除了非常具体的实例,其中模块在导入的对象或 class 上添加或定义功能。由于您没有在 main.py 中使用 ucolorsgridentity,因此根本没有理由导入它们。

如果你需要导入它们,你从定义它们的文件导入它们,而不是从objects.

objects.py中你只需要从classes中导入entity,而在classes中你只需要从map中导入grid(顺便说一句,map 是一个糟糕的名字,因为它隐藏了内部 map 函数)。

无需导入您不使用的符号 - 您不必考虑要导入的模块需要什么;该模块自己负责。

(另一个小吹毛求疵;class 名字应该有 TitleCase,所以 Entity 是正确的大写(我还建议一个更好的 class 名字,因为 Entity真的没什么好说的))(而且是True,不是true)。