如何检查全局变量python

如何检查全局变量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 =

我想检查我的全局变量项是否被函数copy()的值重写

我不知道scope是如何工作的

这里的问题是,当调用一个类register()时,实例使用proof完成,值又是[0],这不是我的目标。我想用de内部函数的de值重写它

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
方法中未定义。