如何检查全局变量python
我想检查我的全局变量项是否被函数copy()的值重写 我不知道scope是如何工作的 这里的问题是,当调用一个类register()时,实例使用proof完成,值又是[0],这不是我的目标。我想用de内部函数的de值重写它如何检查全局变量python,python,function,class,variables,global-scope,Python,Function,Class,Variables,Global Scope,我想检查我的全局变量项是否被函数copy()的值重写 我不知道scope是如何工作的 这里的问题是,当调用一个类register()时,实例使用proof完成,值又是[0],这不是我的目标。我想用de内部函数的de值重写它 class register(): item = [0] print(f'item before function -> {item} <id> = {id(item)}') def __init__(self, quantity =
class register():
item = [0]
print(f'item before function -> {item} <id> = {id(item)}')
def __init__(self, quantity = '20', fabric_c = 'client', fabric_p = 'own'):
self.quantity = quantity
self.fabric_c = fabric_c
p_c = True
def copy(self):
if p_c == True:
line = self.quantity + ' meters ' + self.fabric_c
item = line
print(f'printing description during execution function -> {line} <id> = {id(item)})')
return item
print(f'item after function -> {item} <id> = {id(item)}')
proof = register()
proof.copy()
print(f'proof.item = {proof.item} outside of class -> {id(proof.item)}')
# [out] : item before function -> [0] <id> = 140627839165312
# [out] : printing description during execution function -> 20 meters client <id> = 140627839182128)
# [out] : proof.item = [0] outside of class -> 140627839165312
class寄存器():
项目=[0]
打印(f'item before function->{item}={id(item)}')
def uuu init uuuuu(self,quantity='20',fabric='client',fabric='p='own'):
self.quantity=数量
self.fabric\u c=fabric\u c
p_c=真
def副本(自我):
如果p_c==真:
线=自身数量+仪表+自身结构
项目=行
打印(f'printing description during execution function->{line}={id(item)}'))
退货项目
打印(f'item after function->{item}={id(item)}')
证明=寄存器()
证据副本
打印(f'proof.item={proof.item}类外->{id(proof.item)}')
#[输出]:函数之前的项->[0]=140627839165312
#[out]:执行功能时打印说明->20米客户端=140627839182128)
#[out]:proof.item=[0]在类外->140627839165312
正如您所看到的,内部函数中item的id值与全局变量item的值不同类寄存器顶部的
item
不是全局变量。这是一个类属性。copy
中的项是全局的(实际上是一个模块属性)。底部的proof.item
解析为class属性。此时的全局变量是item
,copy
中的item
,您分配给名为item
的全局变量,而不是类属性register.item
。item\u after\u函数
print显示[0]
,因为它发生在类定义期间。也许你贴出来的时候把缩进弄糟了。另外,p_c
在copy
方法中未定义。