【问题标题】:Splitting python code into different files将python代码拆分为不同的文件
【发布时间】:2021-06-13 03:53:25
【问题描述】:

我是 Python 的初学者,我正在尝试通过制作一个简单的游戏来学习。我一开始将所有内容都放在一个大文件中(我们称之为main.py),但它已经到了拥有如此多的类和函数的地步,我想将这段代码拆分成更易于管理的组件。

我对 LaTeX 有一些经验(当然也不是专家),并且在 LaTeX 中有一个名为 \input 的函数,它允许将部分代码写入不同的文件中。例如,如果我有文件 main.texsub.tex 看起来像:

main.tex:

Some code here.
\input{sub}
Lastly, some other stuff.

和 sub.tex:

Some more code here

那么,当我执行main.tex时,它会执行:

Some code here.
Some more code here
Lastly, some other stuff.

我想知道,Python中是否有类似的东西?


注 1:据我所知,最常用的拆分代码的建议方法是使用模块。由于一些原因,我发现这有点不舒服,我将在下面列出(当然,我知道我觉得他们不舒服是因为我没有经验,而不是因为这是错误的做事方式)。 我觉得模块不舒服的原因:

  1. 我的main.py 文件导入了一些其他模块,例如 Pygame,这些模块需要导入到我创建的所有新模块中。如果出于某种原因我想在此过程的后期将一个新模块导入main.py,那么我需要在我创建的每个其他模块上导入它。

  2. 我的main.py 文件有一些在不同类中使用的全局变量;例如,我有一个全局变量CITY_SIZE,它控制屏幕上所有City 实例的大小。当然,CITY_SIZE 用于类City 的定义中。如果我要将类City 移动到模块classes.py,那么我还需要在classes.py 上定义CITY_SIZE,如果我想更改CITY_SIZE 的值,我需要更改classes.py 的值也是如此。

  3. 再一次,假设我添加了一个classes.py 模块来存储我的所有类,例如City。然后在main.py 我需要在我的代码中写classes.City 而不是City。我知道这可以通过使用from classes import City 来克服,但是每次我向classes.py 添加一个新类时,我都需要添加一行代码。

注 2:我非常感谢任何关于如何在 Python 中舒适地使用模块的 cmets,但请注意,因为这不是我的问题,所以我无法接受这些作为有效答案(但是,再次感谢他们!)。

【问题讨论】:

  • 这个想法是将大文件拆分成更小、更集中的代码块。每个文件中的代码应该密切相关。然后,当您阅读单个文件时,它们应该更容易理解,因为它们所做的工作更少。例如,您可以尝试将与演示有关的所有内容放在一个文件中,这样可以将事物在屏幕上的表示方式与游戏逻辑分开。

标签: python module


【解决方案1】:

如果你的所有模块都在同一个目录下,你可以简单地使用:

import <name of submodule without .py>

例如,如果一个子模块文件被命名为sub.py,你可以这样导入它:

import sub

【讨论】:

  • 感谢您的回答,但恐怕我正在寻找一些不同的东西。例如,如果sub.pyprint(n)main.texn = 5, import sub,那么我们会得到一个错误。
  • 但是如果sub.py包含def printy(x):,那么你可以从main.py调用sub.printy(n)。您通常会在 main.py 的顶部导入函数或类,然后使用它们。而不是像那样直接导入。
猜你喜欢
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2020-01-30
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多