0

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

我不知道范围是如何工作的

这里的问题是,当一个类 register() 被调用,并且实例通过证明完成时,该值再次为 [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

而且你也可以看到,内部函数中item的id值,和全局变量item的值是不一样的

4

1 回答 1

0

item顶部的不是class register全局的。这是一个类属性。里面的项目copy 全局的(实际上是一个模块属性)。proof.item底部的 解析为类属性。那时的全局将是简单item的。

于 2021-05-17T04:12:25.543 回答