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
。
我在 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
。