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

Python 创建对象

  •  
  •   sneezry ·
    Sneezry · 2015-02-20 19:59:28 +08:00 · 3930 次点击
    这是一个创建于 3323 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由于刚刚接触Python,对Python创建对象非常困惑。我想达到的效果用js表示如下:

    var p = {};
    p.x = 1;
    p.y = 2;
    p.v = {};
    p.v.x = 3;
    p.v.y = 4;

    不知道用Python应该怎么实现,谢谢。
    11 条回复    2015-02-21 10:52:14 +08:00
    imlonghao
        1
    imlonghao  
       2015-02-20 20:08:57 +08:00   ❤️ 1
    在 Python 中万物皆对象。字符串是对象。列表是对象,函数是对象,甚至模块也是对象。

    摘抄自:
    http://woodpecker.org.cn/diveintopython/getting_to_know_python/everything_is_an_object.html
    timonwong
        2
    timonwong  
       2015-02-20 20:09:08 +08:00   ❤️ 2
    publicID123
        3
    publicID123  
       2015-02-20 20:09:09 +08:00 via Android
    唔,再次体会到 js 的 object 表达力相当强。
    publicID123
        4
    publicID123  
       2015-02-20 20:16:53 +08:00 via Android   ❤️ 1
    但是这个可以直接用 python 的字典即可。
    zerh925
        5
    zerh925  
       2015-02-20 20:38:25 +08:00   ❤️ 2
    p = {}
    p = {'x':1, 'y':2, 'v':{'x':3, 'y':4}}

    p['x']
    p['y']
    p['v']['x']
    p['v']['y']
    est
        7
    est  
       2015-02-20 20:40:20 +08:00 via Android   ❤️ 1
    js的对象。。。其实叫Hash或者dict
    ruoyu0088
        8
    ruoyu0088  
       2015-02-20 20:40:37 +08:00
    wartime
        9
    wartime  
       2015-02-20 20:47:20 +08:00   ❤️ 1
    p = type('P', (object,), {})()
    p.x = 1
    p.y = 2
    p.v = type('P', (object,), {})()
    p.v.x = 3
    p.v.y = 4
    BlackKey
        10
    BlackKey  
       2015-02-21 00:33:40 +08:00
    用字典吧
    或者要让字典可以类似js,用p['x']和p.x两种访问方式的话可以这样

    class ObjectDict(dict):
    def __getattr__(self, name):
    try:
    return self[name]
    except KeyError:
    raise AttributeError(name)

    def __setattr__(self, name, value):
    self[name] = value

    p = ObjectDict()
    p.x = 1
    p.y = 2
    p.v = ObjectDict()
    p.v.x = 3
    p.v.y = 4
    Wicked
        11
    Wicked  
       2015-02-21 10:52:14 +08:00 via iPhone
    既然用python,就要用python的思维来思考,要pythonic。这个原则对所有语言都是一样的。如果仅仅是翻译js,为啥不直接用js呢。建议楼主还是搞本python的教科书,认真撸一遍吧,只需2,3天的时间,将来受用不尽。

    PS:通常问这种初心的问题会被人喷死的,有这时间直接看书早就解决了。这是职业程序员的素养
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3896 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:30 · PVG 18:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.