访问字典中的对象时可以使用什么来实现

访问字典中的对象时可以使用什么来实现,第1张

在python中访问字典中的元素都是通过下标,但是通过某些方式,我们可以像访问成员变量那样访问字典:

a = {

'foo': 1,

'bar': 2

}

print afoo

print abar

setattr和__getattr__的使用

看如下的代码:

# coding: utf-8

class Test(object):

def __init__(self):

selfa = 1

selfb = 2

# 设置属性都会调用

def __setattr__(self, key, value):

print '__setattr__: %s' % key

self__dict__[key] = value

# __getattr__ 只有在访问不存在的成员时才会被调用

def __getattr__(self, key):

print '__getattr__: %s' % key

return self__dict__[key]

if __name__ == '__main__':

t = Test()

print ta

print tb

tc = 12

print tc

tc = 13

ta = 123

print td

setattr是每次设置属性时都会调用,而__getattr 则只有当访问不存在的元素时才会调用。

对象的属性均保存在

dict 这个字典中。默认的

setattr 和

getattr__也是访问这个字典。

通过一个Storage类的包装访问字典

#!/usr/bin/env python

# coding: utf8

import json

class Storage(dict):

def __init__(self, args, kw):

dict__init__(self, args, kw)

def __getattr__(self, key):

return self[key]

def __setattr__(self, key, value):

self[key] = value

def __delattr__(self, key):

del self[key]

if __name__ == '__main__':

l = {'foo': 'bar'}

s = Storage(l)

print sfoo

print s['foo']

我们可以看到,经过Storage类的包装,此时不仅可以通过下标s['foo'],还可以使用sfoo来调用foo对应的元素。

原理很简单,我们改变了Storage默认的__getattr 和

setattr 实现,默认实现是访问内部的

dict__,而该邂逅访问的是基类dict,所以访问sfoo时,访问的是内部的dict['foo'],所以能访问到元素。

json库loads中的object_hook参数的使用

看如下的代码,常规的json序列化和反序列化是这样做:

import json

from decimal import

obj = {'name': 'haha', 'age': 23, 'height': 175}

json_string = jsondumps(obj)

print json_string

new_obj = jsonloads(json_string)

print new_obj

我们从上面看到,dict经过包装,可以改造成Storage,使用访问属性的方式访问元素。json的loads功能也提供了类似的功能。

# coding: utf-8

import json

obj = {'name': 'haha', 'age': 23, 'height': 175}

json_string = jsondumps(obj)

from collections import namedtuple

Student = namedtuple('Student',['name', 'age', 'height'])

def object_hook_handler(dict_obj):

return Student(name=dict_obj['name'],

age=dict_obj['age'],

height=dict_obj['height'])

new_obj = jsonloads(json_string, object_hook=object_hook_handler)

print new_obj

打印结果为:

Student(name=u'haha', age=23, height=175)

可以看到,通过object_hook这个参数传入一个函数,将dict改造成一个有名元组。

其实,在python中,类也可以看做一个函数,所以直接传入类名做参数即可。

from collections import OrderedDict

new_obj = jsonloads(json_string, object_hook=OrderedDict)

print new_obj

输出结果为:

OrderedDict([(u'age', 23), (u'name', u'haha'), (u'height', 175)])

隐藏Storage

为了使用方便,最好不让用户接触到Storage,所以可以这样写:

#!/usr/bin/env python

# coding: utf8

import json

class Storage(dict):

def __init__(self, args, kw):

dict__init__(self, args, kw)

def __getattr__(self, key):

return self[key]

def __setattr__(self, key, value):

self[key] = value

def __delattr__(self, key):

del self[key]

def storage_object_hook(dct):

return Storage(dct)

def json_decode(data, args, kw):

return jsonloads(data, object_hook=storage_object_hook, args, kw)

def json_encode(data, args, kw):

return jsondumps(data, args, kw)

if __name__ == '__main__':

l = {'foo': 'bar'}

l = json_decode(json_encode(l))

print l

print lfoo

 许多汉字在五行中都有它对应的属性,那么在康熙字典里二十笔画属水的字有哪些呢?下面我为你整理了康熙字典二十画属水的字,希望对你有所帮助!

20笔画五行属水的字

 譬 罴 咸 沥 潇 蠛 黼 迈 怀 鬕 嚷 颟 潴

 还 馒 避 襣 躄 泸 濒 辫 缤 邂 泷 鲾 瀛

 穮 鳆 瀚 鹛 蚝 鳊 露 瀣 瀜 瀞 膀 龅 濑

 蠙 膑 魔 鹕 瀖

康熙字典二十画属水的字——躄

 躄读音:[bì]

 基本解释

 跛脚:“民家有~者,槃散行汲。”

 〔~~〕行进不止的样子,如“奇俊无少年,日车何~~!”

 仆倒:“迷闷~地。”

 详细解释

 〈形〉

 蛉惩炔荒苄凶[lame]

 瘖聋跛躄。——《礼记·王制》

 犹将伸伛起躄。——枚乘《七发》

 民家有躄者。——《史记·平原君虞卿传》。正义:“跛也。”

 躄者见虎而不走。——《淮南子·说林》

 躄者告盲者。——《淮南子·说山训》

 胝身躄步。——柳宗元《天对》

 瘖聋跛躃。——《礼记·王制》

 又如:躄足(跛足;瘸腿);躄步(跛行)

 常用词组

 躄疾 bì jí

 [lame in both legs] 瘸脚病

 兄弟三人,皆得躄疾。--明 罗贯中《全图绣像三国演义》

 部首笔画

 部首: 足

 部外笔画: 13

 总笔画: 20

 五笔86: nkuh

 五笔98: nkuh

 仓颉: sjryo

 笔顺编号: 51325141431122512134

 四角号码: 70801

 郑码: xmsj

 Unicode: CJK 统一汉字 U+8E84

康熙字典二十画属水的字——邂

 邂读音:[xiè]

 基本解释

 〔~逅〕a不期而会,如“~~相逢”;b一旦,偶然,如“~~发露,祸及知亲”。

 详细解释

 (形声。从辵( chuò),解声)

 常用词组

 邂逅 xiè hòu

 [meet(a relative,friend,etc)unexpectedly;meet by chance;run into sb]不期而遇

 今夕何夕,见此邂逅。--《诗唐风绸缪》

 邂逅相遇 xiè hòu xiāng yù

 邂逅:未约而相逢。指无意中相遇。

 部首笔画

 部首: 辶

 部外笔画: 13

 总笔画: 16

 五笔86: qevp

 五笔98: qevp

 仓颉: ynbq

 笔顺编号: 3535112533112454

 四角号码: 37305

 郑码: rlmw

 Unicode: CJK 统一汉字 U+9082

 字形结构

 汉字首尾分解: 辶解

 汉字部件分解: 角刀牛辶

 笔顺编号: 3535112533112454

 笔顺读写: 撇折撇折横横竖折撇撇横横竖捺折捺

一、暧昧的意思

释义:指的是男女之间态度含糊、不明朗的关系。是一种很特别的男女朋友关系,存在于友情之间,又超然于友情之上。

引证:沈从文《绅士的太太》:“这婶婶是年青女人,对于这暧昧情形有所窘迫,也感到无话可说了。”

二、邂逅的意思

释义:不期而遇、偶然。

引证:夏衍《长途》:“这广坦的荒原,使我想起了我们从广州退出时在柳江船上邂逅的一个旅伴。”

扩展资料

邂逅的近义词:

一、相遇

释义:遭遇;相逢。

引证:鲁迅《书信集·致姚克》:“如果竟不相遇,我当直接寄到那边去。”

二、相逢

释义:彼此遇见、会见或碰见。

引证:鲁迅《题三义塔》:“度尽劫波兄弟在,相逢一笑泯恩仇。”

艳遇和邂逅主要有以下区别:

艳遇:

定义:艳遇中的"艳"意味着美丽,遇到的"遇"则指遇到。所以,艳遇可以理解为遇到美丽,如流动的水、开放的花、成长的果、沿途的风景等,这些都是美丽的。

感情色彩:相对于邂逅,艳遇的感情色彩更为浓墨重彩,描述的是一种美好的经历。

邂逅:

定义:邂逅指不期而遇或者偶然相遇,来源于《诗经·国风》。它也可以表示一种欢快的神态。

含义:邂逅通常是指两个完全不认识的人第一次见面,而遇见则可以是故友的相逢,也可以是两个陌生人的见面。

总结来说,艳遇更多是关于两个有互动的行为,通常形容一段美好的经历,而邂逅则更偏重于两个完全不认识的人的偶然相遇。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/lianai/9067492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-10-04
下一篇2023-10-04

发表评论

登录后才能评论

评论列表(0条)

    保存