python如何访问对象的属性_按对象属性访问Python对象列表
我不知道我试图做的是不是Pythonic,我只是试图做错,或者我不知道如何正确地提出这个问题.能够做到这一点对我来说是有意义的,但我已经搜索了15种不同的方法,但找不到答案.
我想做的事情看起来很简单:我有一个对象列表.我想通过对象的属性访问该列表.此代码有效:
class Fruit:
def __init__(self, name, color):
self.name = name
self.color = color
def __str__(self):
return self.name
class BaseballPlayer:
def __init__(self, name, number, position):
self.name = name
self.number = number
self.position = position
def __str__(self):
return self.name
class ListByProperty(list):
def __init__(self, property, list):
super(ListByProperty, self).__init__(list)
self.property = property
def __getitem__(self, key):
return [item for item in self if getattr(item, self.property) == key][0]
fruits = ListByProperty('name', [Fruit('apple', 'red'), Fruit('banana', 'yellow')])
baseballTeam = ListByProperty('position', [BaseballPlayer('Greg Maddux', 31, 'P'),
BaseballPlayer('Javy Lopez', 8, 'C')])
teamByNumber = ListByProperty('number', baseballTeam)
print 'Apples are', fruits['apple'].color
pitcher = baseballTeam['P']
print 'The pitcher is #%s, %s' % (pitcher.number, pitcher)
print '#8 is', teamByNumber[8]
>>> Apples are red
The pitcher is #31, Greg Maddux
#8 is Javy Lopez
但是,我真的必须让我自己的列表类做这么简单的事情吗?除了循环或listcomp之外,没有通用的方法吗?这似乎应该是一个非常常见的事情,通过对象的属性获得列表中的对象和访问项.它似乎应该以类似于sorted(key = …)的方式得到普遍支持.
请注意,这与需要dict的情况不同.实际上,使用对象列表而不是字典的全部意义在于避免必须执行以下操作:
fruits = {'apple': Fruit('apple', 'red')}
…这需要你输入两次苹果.看起来应该有一种通用的方法来做这样的事情:
print 'Apples are', fruits['apple'].color
…无需子类列表.
好吧,你可以建立一个像这样的字典:
fruits = [Fruit('apple', 'red'), Fruit('banana', 'yellow')]
fruits = {f.name: f for f in fruits}
或者你可以单行,但看起来仍然……呃……语法上是酸的?
标签:python
来源: https://codeday.me/bug/20190623/1275474.html
python如何访问对象的属性_按对象属性访问Python对象列表相关推荐
- 对象删除某个属性_充分了解JavaScript中【对象】的概念(二)
点击上方「蓝字」关注我们 之前的文章: 充分了解JavaScript中[对象]的概念(一) 这篇文章我们继续来讲解JavaScript中[对象]的概念,因为这是一系列的文章,所以建议从第一篇文章开始看 ...
- networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选
作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...
- activexobject对象不能创建_脚本语言系列之Python | Python面向对象
Python是做自动化工作首选的一门语言,与更复杂的语言相比,Python 非常便于快速学习.语法很少,具有良好的 可读性,即使测试工程师们没有丰富的编码经验,也能快速学会:Python 的极简风格对 ...
- python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...
大家在做项目开发的过程中,会不会经常遇到需要处理图片却没有快速有效的工具的情况呢?比如客户需要给图片加上水印,你可能会用到PS这些高级软件去处理,这样虽然有效果但是需要相对较长的时间:作为程序猿,你一 ...
- java 对象拷贝属性_使用Java对两个对象的属性进行拷贝
最近和Java的反射打交道比较多一点,可能是因为自己以后的方向是架构师的缘故吧,他们主要搞业务.我能也就搞架构,整天画一些流程图. 虽然对于只有一年实习经验的我,不知道这样是否好,但是我还是那句话,不 ...
- python中常用的序列化模块_使用pickle模块对python对象进行序列化
pickle模块是Python自带的一个标准模块,专用于Python各种对象的序列化和反序列化,可用于Python内置的各种数据对象(Python中一切都是对象),也可用于程序员自定义的类和对象. p ...
- python用类名直接调用方法_一文读全 Python 的面向对象编程方法
背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...
- python刷题一亩三分地_手把手教你用python抓网页数据【一亩三分地论坛数据科学版】...
前言:. visit 1point3acres.com for more. 数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,pyt ...
- python统计特定类型文件数量_分享一些常见的Python编程面试题及答案
需要领取更多Python学习资料的朋友,可以免费自取哈 [腾讯文档]Python相关学习资料(视频.学习经验) https://docs.qq.com/doc/DS1JxU2ZWTmVWa05L 1. ...
- python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...
从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...
最新文章
- 张杰和机器人_《80后脱口秀》吐槽高考 张杰化身“机器人”
- Safari调试iOS应用
- mysql不支持union_Mysql中Union的子句不支持order by
- 算法实践--最小生成树(Kruskal算法)
- axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题
- 95-280-035-源码-资源管理-计算资源管理-TaskSlot
- java development kit64_Java SE Development Kit (JDK) v14.0 x64
- Linux下的字符界面扫雷游戏
- 变分模态分解(VMD)前言
- ffmpeg处理YUV422和YUV420P相互转换
- 盘点常用的IDC综合业务、财务及用户管理平台
- 什么是Cat.1,Cat.1和4G之间的区别
- MSP430学习总结——定时器
- 专用播放器到底是些什么东西?
- centos7 应用笔记: fslint 文件查重
- Android常用技巧总结
- Python爬虫日记2——使用requests
- 楚云飞悼念李云龙之广播
- 一文搞懂使用Nginx服务器部署前端Web项目
- 数据库时代的终结(转)