Python 创建对象

2015-02-20 19:59:28 +08:00
 sneezry
由于刚刚接触Python,对Python创建对象非常困惑。我想达到的效果用js表示如下:

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

不知道用Python应该怎么实现,谢谢。
4195 次点击
所在节点    Python
11 条回复
imlonghao
2015-02-20 20:08:57 +08:00
在 Python 中万物皆对象。字符串是对象。列表是对象,函数是对象,甚至模块也是对象。

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

p['x']
p['y']
p['v']['x']
p['v']['y']
ruoyu0088
2015-02-20 20:40:19 +08:00
est
2015-02-20 20:40:20 +08:00
js的对象。。。其实叫Hash或者dict
ruoyu0088
2015-02-20 20:40:37 +08:00
wartime
2015-02-20 20:47:20 +08:00
p = type('P', (object,), {})()
p.x = 1
p.y = 2
p.v = type('P', (object,), {})()
p.v.x = 3
p.v.y = 4
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
2015-02-21 10:52:14 +08:00
既然用python,就要用python的思维来思考,要pythonic。这个原则对所有语言都是一样的。如果仅仅是翻译js,为啥不直接用js呢。建议楼主还是搞本python的教科书,认真撸一遍吧,只需2,3天的时间,将来受用不尽。

PS:通常问这种初心的问题会被人喷死的,有这时间直接看书早就解决了。这是职业程序员的素养

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

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

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

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

© 2021 V2EX