奇怪的行为。类外的函数改变了它的实例变量

时间:2017-01-20 14:26:15

标签: python scope

我不知道我是否遗漏了一些非常明显的东西,但我发现这种行为令人惊讶。

编辑: 好的,所以这里是一个例子,我不使用任何默认参数 - 不像链接副本 - 它仍然表现如此。有人可以解释一下原因吗?

class Manager(object):
    @classmethod
    def calculatesomething(cls, array, attr):
        array.append(attr)
        return 1

class MyClass(object):
    def __init__(self, array):
        self.array = array

    def __getattr__(self, attr):
        variable = Manager.calculatesomething(self.array, attr)
        return variable


a = MyClass(['one', 'two', 'three'])
print a.array
print a.four
print a.array

输出:

['one', 'two', 'three']
1
['one', 'two', 'three', 'four']

我的期望:

['one', 'two', 'three']
1
['one', 'two', 'three']

就像我们有一个简单的功能一样:

def f(a):
    a += 1
    return a
a = 1

print a
print f(a)
print a

我期待:

1
2
1

这正是我得到的。

0 个答案:

没有答案