如何修改另一个Python文件中的变量?

7

windows 10 - python 3.5.2

你好,我有以下两个Python文件,我想使用第一个Python文件中的代码编辑第二个文件中的变量。

firstfile.py

from X.secondfile import *

def edit():
    #editing second file's variables by user input
if Language == 'en-US':
    print('language is English-us')
elif Language == 'en-UK':
    print('language is English-uk')

secondfile.py

Language = 'en-US'

我可以通过以下代码添加一些变量,但是如何编辑一个变量呢?
with open("secondfile.py","a") as f:
    f.write("Language = 'en-US'")

有什么想法如何做到这一点吗?

2个回答

7

您可以在第二个文件中的类中嵌入Language,并具有更改它的方法。

模块2

class Language:
    def __init__(self):
        self.language = 'en-US'
    
    def __str__(self):
        return self.language

    def change(self, lang):
        assert isinstance(lang, str)
        self.language = lang

language = Language()

然后导入“语言”,并使用change方法进行更改。

模块1

from module2 import language

print(language)
language.change("test")
print(language)

@pycoder 我们写了一样的东西。英雄所见略同 ;) - zvone
language.change("test")之后是否会更新模块2?我希望它能保存到下一次。 - Mohammad Zamanian
2
是的,它确实可以,但当然它实际上并没有改变文件(你不能退出程序并重新打开它,因为它不会写入文件)。但是,如果您添加第三个模块,在模块1中更改“language”后打印出language,它将显示“test”。我假设那是你想要的。如果您希望在“会话”之间保存它,您需要将其写入某种文件中(pickling、纯文本等)。 - JakeD

2
这可以用来编辑另一个文件中的变量:
import X.secondfile
X.secondfile.Language = 'en-UK'

然而,我有两个建议:

  1. 不要使用 import * - 它会用意外的名称污染命名空间

  2. 如果它们不是常量,请不要使用这样的全局变量。一些代码将在更改值之前读取该值,一些代码将在更改后读取该值,没有人会预料到它会改变。

因此,与其这样做,还不如在另一个文件中创建一个类。

class LanguagePreferences(object):
    def __init__(self, langcode):
        self.langcode = langcode

language_preferences = LanguagePreferences('en-UK')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接