从另一个模块访问对象

2023-11-26

我是一个非常缺乏经验的程序员,正在创建一个游戏(使用 Python 3.3)作为学习练习。我目前有一个主模块和一个战斗模块。

游戏中的人物由“Person”类的实例表示,并在主模块中创建。然而,战斗模块显然需要访问这些对象。此外,我可能稍后会创建更多也需要访问这些对象的模块。

如何允许其他模块访问 main.py 中的 Person?

就目前情况而言,main.py 有

import combat

在顶部;添加

import main

Battle.py 似乎没有帮助。

我是否应该在单独的模块(common.py?)中实例化我的对象并将它们导入到需要访问它们的每个模块中?


是的,你应该考虑到这一点。您尝试的是模块之间的循环导入,这通常会导致比它解决的问题更多的问题。如果combat进口main and main进口combat,那么您可能会收到错误,因为某些对象定义将丢失main当您尝试导入它们时。这是因为main尚未完成执行时combat开始执行导入。假设main是您的启动脚本,它应该只是通过调用另一个模块的方法来启动程序;如果所需的方法是类的实例方法,它可以实例化一个对象。也避免全局变量。即使现在看起来它们不会成为问题,但以后也会给你带来麻烦。

也就是说,您可以像这样引用模块的成员:

import common
x = common.some_method_in_common()
y = common.SomeClass()

or

from common import SomeClass
y = SomeClass()

就我个人而言,我通常避免在不使用模块名称限定它的情况下引用另一个模块中的方法,但这也是合法的:

from common import some_method_in_common
x = some_method_in_common()

我通常使用from ... import ...对于类,我通常使用第一种形式作为方法。 (是的,这有时意味着除了导入模块本身之外,我还从模块导入了特定的类。)但这只是我个人的惯例。

其替代语法是strongly灰心 is

from common import *
y = SomeClass()

这会将 common 的每个成员导入到当前作用域中,该作用域不以下划线开头(_)。不鼓励这样做的原因是它使识别名称的来源变得更加困难,并且使破坏事物变得太容易。考虑这对导入:

from common import *
from some_other_module import *
y = SomeClass()

哪个模块做的SomeClass来自?除了查看这两个模块之外,没有其他办法可以区分。更糟糕的是,如果both模块定义SomeClass or SomeClass后来添加到some_other_module?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个模块访问对象 的相关文章

随机推荐

  • 如何通过 slack API 删除/禁用用户?

    我对此尝试了多种方法 首先尝试获取没有任何用户 ID 的用户 这仅返回我的用户 然后尝试获取具有其他 id 的用户 它也可以正确检索数据 但是 我似乎无法将用户属性设置为 已删除 我正在使用这种Python方法 slack client a
  • 本地存储库需要 Git LFS 吗?

    我创建了一个专门存储在本地的 Git 存储库 我问自己 我是否真的需要 Git LFS 来存储二进制文件 据我所知 gitattributes已正确配置 如下所示 psd binary 是的 文件落在 git objects 但它们被压缩并
  • 创建CSS全局变量:样式表主题管理[重复]

    这个问题在这里已经有答案了 有没有办法在 css 中设置全局变量 例如 Color1 fff Color2 b00 h1 color Color1 background Color2 最新更新 16 01 2020 CSS 自定义属性 变量
  • CSV 到关联数组

    我见过很多关于如何获取 CSV 文件 然后创建一个以标题为键的关联数组的示例 例如 Brand Model Part Test Honda Civic 123 244 Honda Civic 135 434 Toyota Supra 511
  • 将范围扩展为:“1-3,6,8-10”到 [1,2,3, 6, 8,9,10]

    我试图在我的程序中添加一个选项 允许用户选择他想要执行的程序步骤 我希望能够解析像这样的字符串 1 3 6 8 10 并得到 1 2 3 6 8 9 10 你知道 Python 中是否已经存在正在执行此操作的东西吗 该函数执行您所要求的操作
  • Solr 可以加载原始 Lucene 索引吗?

    我的一些同事有一个大型 Java Web 应用程序 该应用程序使用使用 Lucene Java 构建的搜索系统 我想做的是拥有一个基于 HTTP 的 API 来访问那些现有的搜索索引 我以前使用过 Nutch 并且非常喜欢 OpenSear
  • WordPress 自定义注册表

    我有一位客户需要定制注册表 我需要在此页面上进行自定义设计 我需要添加自定义字段 例如名字 公司 电话等 有人可以帮我解决这个问题吗 询问 WordPress 问题的更好地方可能是WordPress 答案 无论如何 如果你想在没有插件的情况
  • 在角度引导程序中设置初始静态选项卡

    我似乎无法在角度引导选项卡集中设置初始选项卡 它始终将最左侧的选项卡设置为活动状态 给定 html
  • 忽略不允许的属性 IISMAJORVERSION 和“EnableUserControl”?

    我的安装程序包在我的计算机上运行 但在我同事的计算机上失败 查看日志 我可以看到一些属性值在 ExecuteAction 短语期间没有保留 有几个Ignoring disallowed property安装程序日志文件中的行以及这些属性在
  • Django 模板中的 IsInstance 吗?

    有没有办法在 Django 模板中执行 isinstance issubclass 操作 我意识到我可以编写自己的模板标签 但令我惊讶的是这不可能 这让我觉得我要么做错了什么 要么遗漏了一些明显的东西 我希望显示两个不同的标记部分 具体取决
  • 带窥视功能的 UIPageViewController

    我正在尝试使用创建页面浏览器UIPageViewController在 Interface Builder 中 允许显示部分相邻页面 也称为查看 我一直在关注教程http www appcoda com uipageviewcontroll
  • 从不同的类访问 HashMap

    我的班级中有一个名为 DataStorage 的哈希图 HashMap
  • Tensorflow 2.0 自定义训练循环的学习率

    当我使用tensorflow 2 0自定义训练循环时 是否有任何函数或方法可以显示学习率 这是张量流指南的示例 def train step images labels with tf GradientTape as tape predic
  • 在 py2exe 构建中包含 PYD/DLL

    我的应用程序的模块之一使用 pyd 文件中的函数 有一个选项可以排除 dll exclude dlls 但是有一个选项可以包含它们吗 尽管复制了其余文件 py 但构建过程似乎并未复制我的模块中的 pyd 我还需要包含一个 dll 如何让 p
  • Solr 使用太多内存

    我们有一个在带有 Oracle Java 6 Hotspot JDK 的 Windows 2008 R2 上运行的 Solr 3 4 实例 该实例变得无响应 当我们查看机器时 我们注意到可用物理内存变为零 Tomcat7 exe 进程使用了
  • php paypal 快速结帐问题

    我正在尝试在我的网站上集成贝宝快速结帐 我试图使用沙箱进行检查 当我从我的网站提交数据时 生成的令牌没有错误 但当重定向到 PayPal 时 它不显示付款金额 顺便说一句 我正在使用贝宝快速结帐向导中的代码 如果有人指出我正确的方向 那将会
  • 选择日期后添加天数(周末和节假日除外)

    我有两个文本字段 在第一个文本字段中 我使用 jQueryUI Datepicker 添加了一个日历 当用户从日期选择器中选择日期时 它应该自动向该日期添加 30 天 并在第二个文本字段中设置该值 我已经完成了将日期添加 30 天的工作 但
  • JPA EntityManager:为什么使用 persist() 而不是 merge()?

    EntityManager merge 可以插入新对象并更新现有对象 为什么要使用persist 只能创建新对象 无论哪种方式都会将实体添加到 PersistenceContext 中 不同之处在于您随后对该实体执行的操作 Persist
  • Spring中如何获取Session对象?

    我相对较新Spring和春季安全 我试图编写一个程序 需要使用 Spring security 在服务器端对用户进行身份验证 我想出了以下几点 public class CustomAuthenticationProvider extend
  • 从另一个模块访问对象

    我是一个非常缺乏经验的程序员 正在创建一个游戏 使用 Python 3 3 作为学习练习 我目前有一个主模块和一个战斗模块 游戏中的人物由 Person 类的实例表示 并在主模块中创建 然而 战斗模块显然需要访问这些对象 此外 我可能稍后会