V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Williamongh
V2EX  ›  Python

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

  •  
  •   Williamongh · 2018-03-21 15:57:40 +08:00 · 2842 次点击
    这是一个创建于 2426 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如:
    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

    这样感觉很像全局变量。这应该怎么理解?请问有没有相关的文档可以阅读呢?
    3 条回复    2018-03-22 16:23:59 +08:00
    wang62065
        1
    wang62065  
       2018-03-22 13:02:28 +08:00
    实例化时候修改类中的成员变量~?
    wang62065
        2
    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
        3
    kaneg  
       2018-03-22 16:23:59 +08:00
    Python 和 Java 等面向对象的编程语言在函数调用的时候都是传递引用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:26 · PVG 02:26 · LAX 10:26 · JFK 13:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.