当前位置: 首页 > news >正文

python模型的属性是什么_Python数据模型

Python解释器在遇到特殊的句法(通常以双下划线开头)时,会使用特殊的方法去处理它。

比如我们在使用列表或者字典时经常会用到obj[key],而解释器遇到obj[key]时会调用obj.getitem(key)来获取值。

一摞有风格的纸牌(python2.7)

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:

ranks = [str(n) for n in range(2, 11)] + list('JQKA')

suits = 'spades diamonds clubs hearts'.split()

def __init__(self):

self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]

def __len__(self):

return len(self._cards)

def __getitem__(self, position):

return self._cards[position]

if __name__ == '__main__':

deck = FrenchDeck()

print len(deck)

for card in deck:

print card

上面的代码中几点需要注意的:

1.namedtuple:用以构建只有少数属性但是没有方法的对象

2.可以使用len(FrenchDeck())来获取这一叠牌的数量

3.可以使用FrenchDeck()[0]来获取第一张牌,这是因为定义了__getitem__()方法

4.可以使用for来迭代这一叠牌,也是因为__getitem__()方法

在Python中,很多时候特殊方法的调用是隐式的,比如for i in x:这个语句,背后调用的是iter(x),而这个函数的背后则是x.iter()方法。

repr()和str()的区别:

__str__()是在使用str()函数时或者在用print打印一个对象的时候被调用,并且它返回的字符串对终端用户更加友好。

__repr__()是在使用repr()函数被调用,交互式的控制台和调试程序用repr()函数来获取字符串表示形式

常用的特殊方法:

字符串表示形式:__repr__ __str__

集合模拟:__len__ __getitem__ __setitem__ __contains__

迭代枚举:__iter__ __next__

可调用模拟:__call__

上下文管理:__enter__ __exit__

实例的创建和销毁:__new__ __init__ __del__

属性管理:__getattr__ __getattribute__ __setattr__ __delattr__ __dir__

属性描述符:__get__ __set__ __delete__

相关文章:

  • python如何优化内存_如何优化Python占用的内存
  • python functools.reduce使用_Python的functools.reduce用法
  • vue computed 传参_vue生命周期
  • vb.net 循环生成excel的多个sheet_自动生成报告第一弹
  • python从零开始到放弃之二_python从入门到放弃QAQ
  • 安科瑞仪表调试工具_安科瑞ADW系列物联网智能电力仪表——吴玲霞/徐振
  • winform ctrl键单击多选_Ctrl+Shift 组合键用法大全,知道一半以上就是高手!
  • springboot中为何参数拿对象接收总是报错_SpringBoot整合Swagger2
  • sqlconnection对象的open()是否成功_VBA与数据库解决方案第8讲:创建ADO对象,到打开记录集的过程...
  • swing的gui是通过何种模式进行事件响应与监听_一起双网卡服务器被黑引发的勒索事件...
  • mysql上传数据太慢_腾讯云Ubuntu18.04部置Django2系列(四):数据库迁移及导入本地mysql数据...
  • 螺丝上的十字磨没了_螺丝为什么要分为一字和十字螺丝?
  • python3.7 opencv安装_win10 anaconda3(python3.7) 安装 opencv
  • python qt开发保存_【转】python qt(pyqt)的文件打开、文件保存、文件夹选择对话框...
  • 支架预压弹性变形值计算_支架和钢管柱贝雷梁现浇简支箱梁施工,终于找到你!!...
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • css选择器
  • REST架构的思考
  • SQL 难点解决:记录的引用
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #考研#计算机文化知识1(局域网及网络互联)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (南京观海微电子)——I3C协议介绍
  • (算法)Travel Information Center
  • (状压dp)uva 10817 Headmaster's Headache
  • . NET自动找可写目录
  • .htaccess 强制https 单独排除某个目录
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net 路由处理厉害了
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .skip() 和 .only() 的使用
  • //解决validator验证插件多个name相同只验证第一的问题
  • @Not - Empty-Null-Blank
  • @RequestMapping 的作用是什么?
  • @Valid和@NotNull字段校验使用
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [22]. 括号生成
  • [AAuto]给百宝箱增加娱乐功能
  • [Android 数据通信] android cmwap接入点
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [cb]UIGrid+UIStretch的自适应
  • [go] 迭代器模式