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
ljcarsenal
V2EX  ›  Python

如何在类中使用列表?

  •  
  •   ljcarsenal · 2014-08-10 21:20:36 +08:00 · 2382 次点击
    这是一个创建于 3560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有这样的需求,定义一个类,该类的不同对象都具有列表,能进行独立的增删元素的操作。但如果把列表定义成类的成员的话,似乎所有对象公用一个列表。这样导致的结果就是所有对象的列表内容都一样。如何解决这个问题呢
    6 条回复    2014-08-11 21:48:18 +08:00
    eriale
        1
    eriale  
       2014-08-10 22:10:00 +08:00
    为什么会有这种情况?python中对象自己的属性是不会共享的。
    class A():
    def __init__(self):
    self.lst = []
    lll9p
        2
    lll9p  
       2014-08-11 00:13:40 +08:00
    在Python里,类变量通常在内部被当做字典来处理并遵循通常所说的方法解析顺序(Method Resolution Order (MRO))。

    看这里: http://blog.jobbole.com/68256/
    magine
        3
    magine  
       2014-08-11 08:59:10 +08:00
    如一楼所写的那样,把列表初始化放在构造函数中,而不是类空间中。
    yueyoum
        4
    yueyoum  
       2014-08-11 12:39:40 +08:00
    LZ 先去补一补 面向对象知识
    magine
        5
    magine  
       2014-08-11 21:46:54 +08:00
    @yueyoum
    其实python语法有个坑……
    刚开始面向对象是从c++入门的,c++里对象自己的成员不是写在构造函数里的,公有的得加static……
    然后刚开始写python没怎么看教程,结果也犯了楼主这个错误。
    magine
        6
    magine  
       2014-08-11 21:48:18 +08:00
    @yueyoum
    说错了,不是“公有的”是“静态成员”。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:14 · PVG 04:14 · LAX 13:14 · JFK 16:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.