Python 将本地值分配给导入模块中的属性

Python assign local value to attribute in imported module

我在 Script1 中定义了 class1。

要启动class1,你只需要一个变量x,但它有其他属性y,启动class不需要。当我 运行 脚本 1 时,它将值 10 分配给在 if __name__ == __main__: 行之后声明的 y。

######Script1#########
Class class1:
    def __init__(self,x):
        self.x = x
        self.y = y
if __name__ == '__main__':
    y = 10
    class_instance = class1(100)
    print(class_instance.y) #prints 10 or assigns 10 to class.y

在 script2 中,我导入 class1 并尝试将值赋给 y,但它给了我 NameError。 我尝试在 class1 中将 y 声明为全局变量,以及其他一些东西,但它不起作用。 我知道它与名称空间和范围界定有关 - 任何指向正确方向的指针都会有很大帮助。谢谢。

#### script2 ######
from script1 import *
if __name__ == '__main__':
    y = 10
    class_instance = class1(200)
    print(class_instance.y) #gives NameError
NameError: name 'y' is not defined

这里你想要的是一个可选的 keyword argument (https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments):

Class class1:
    def __init__(self,x, y=10):
        self.x = x
        self.y = y
if __name__ == '__main__':
    class_instance = class1(100)
    print(class_instance.y)              #prints 10 

    instance2 = class1(100,200)
    print(instance2.y)                   #prints 200 

    instance3 = class1(100,y=300)
    print(instance3.y)                   #prints 300 

这将允许您根据需要提供 y 值。如果您不提供 y 值,它将使用默认值 10