Python如何更改作为“from module import”导入的模块中的变量

2024-06-06 06:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

“”“为我的IF(交互式小说)模块做一个更好的版本,这样你就可以创建一个导入它的模块,然后开始添加垃圾 三件事-如果你算上调试变量,四件事- 变量PLAYER_NAME、PLAYER_LOCATION和PLAYER_INVENTORY。在基地他们是“卢克”,没有,和名单 adventure内容模块使用“from mask_IF import*”,更改这些变量中的任何一个都会使其位于当前命名空间中—它不会更改导入的变量。 因为,我无法掩饰_IF.变量=值。在

我想保留我的“from mask_IF import*”,但同时我有这些变量,这些变量应该在每个单独的冒险模块中定义,并在主模块中使用。”“”在

在==== 在主模块中:

PLAYER_NAME = "Luke"
...
class ActionHelp(Action):
    def ActionHandle(self, Object1, Object2):
        print "No help for you, " + PLAYER_NAME + "!"

在冒险模块中:

^{pr2}$

在==== 你通常叫卢克 但今天你是冒险测试者001

help No help for you, Luke! The command is help The Object1 is NOT GIVEN The Object2 is NOT GIVEN


Tags: 模块thenonamefromimportifis
3条回答

是的,你做不到。“from mask_IF import*”正在当前模块中创建一个名为PLAYER_NAME的新变量,它恰好指向相同的底层数据。它是mask_IF模块中变量的别名。当您尝试为PLAYER_NAME指定其他值时,您会告诉局部变量指向新的内容,这对mask_IF变量指向的内容没有任何影响。在

你不能有理由这么做。它可以通过创建一个具有适当属性的对象来进行模拟,但是首先您最好不要导入*。在

如果要使用类似StrObj的对象而不是字符串,那么您将处理一个可变类型引用,该引用可以从任何地方更新值。代码中唯一的区别在于设置它时调用Set(),而不是= '...'。在

class StrObj(object):
    def __init__(self, value=''):
        self.value = value
    def __add__(self, other):
        return other + self.value
    def Set(self, value):
        self.value = value

假设在mask_IF.pyPLAYER_NAME = StrObj('Some Name')。。。在

^{pr2}$

所说的一切…

我认为最好是用NAME的属性定义一个Player对象,等等。。。只是用它来代替。我建议少用import *。在

相关问题 更多 >