Python 中,为什么在函数内可以直接修改外部类实例的属性呢?像全局变量。

2018-03-21 15:57:40 +08:00
 Williamongh
例如:
class C(object):
def __init__(self):
self.a = 0

def f (c):
c.a += 1
c.b = 2

c0 = C()
print(c0.a)
f(c0)
print(c0.a, c0.b)

输出:
0
1 2

这样感觉很像全局变量。这应该怎么理解?请问有没有相关的文档可以阅读呢?
2722 次点击
所在节点    Python
3 条回复
wang62065
2018-03-22 13:02:28 +08:00
实例化时候修改类中的成员变量~?
wang62065
2018-03-22 13:06:55 +08:00
c0 = C() 实例化了 C 之后 C 原本有 c0 就是一个 class 类,里面有成员变量 c0.a
或者说每一个实例化的 C 类里面都默认有一个成员变量 a=0
print(c0.a) 所以输出了 0

f(c0)把 c0 里面默认的 a 变量自增了 1 所以 c0.a 在 c.a += 1 是 1(原本默认是 0)
又新增了一个 b=2 所以最后输出的时候是 1 2

不知道我这样理解的对不对,等大佬来解答一下
kaneg
2018-03-22 16:23:59 +08:00
Python 和 Java 等面向对象的编程语言在函数调用的时候都是传递引用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440101

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX