(一)python 数据模型
1、通过实现特殊方法,自定义类型可以表现的跟内置类型一样;
如下代码,实现len, getitem,可使自定义类型表现得如同列表一样。
import collections
from random import choice 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 rank in self.ranks
for suit in self.suits] def __len__(self):
return len(self._cards) def __getitem__(self, position):
return self._cards[position] suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
def spade_hith(card):
rank_value = FrenchDeck.ranks.index(card.rank)
# print(rank_value)
# print(suit_values[card.suit])
return rank_value * len(suit_values) + suit_values[card.suit] if __name__ == '__main__':
deck = FrenchDeck()
#card = choice(deck)
#print(card)
for card in sorted(deck, key=spade_hith):
print(str(card))
print(repr(card))
2、repr和str
(1) __repr__所返回的字符串应该准确(%r),无歧义,并且尽可能表达出如何用代码创建出这个被创建的对象,如repr(v);输出Vector(3, 4)
(2) __str__在str函数被调用(%s),或者打印一个对象的时候被调用,如str(v);输出(3,4)
(3)默认实现打印对象时,两者没有什么区别
(4)两个特殊方法,只想实现一个时,__repr__是更好的选择,因为如果一个对象没有__str__函数,而python解释器又需要调用时,会用__repr__替代。
两者的区别,参考:https://stackoverflow.com/questions/1436703/difference-between-str-and-repr
(一)python 数据模型的更多相关文章
- Python数据模型及Pythonic编程
Python作为一种多范式语言,它的很多语言特性都能从其他语言上找到参照,但是Python依然形成了一套自己的“Python 风格”(Pythonic).这种Pythonic风格完全体现在 Pytho ...
- 第1章 Python数据模型
#<流畅的Python>读书笔记 # 第一部分 序幕 # 第1章 Python数据模型 # 魔术方法(magic method)是特殊方法的昵称.于是乎,特殊方法也叫双下方法(dunder ...
- gj3 Python数据模型(魔法函数)
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...
- python高级(一)—— python数据模型(特殊方法)
本文主要内容 collections.namedtuple __getitem__ 和 __len__ __repr__和__str__ __abs__.__add__和__mul__ __bool_ ...
- Python数据模型与Python对象模型
数据模型==对象模型 Python官方文档说法是"Python数据模型",大多数Python书籍作者说法是"Python对象模型",它们是一个意思,表示&quo ...
- Python数据模型
引言 像大多数人一样,我在对一直传统的面向过程语言C一知半解之后,走进了面向对象的世界,尽管对OOP一无所知,还好Python还保留有函数式编程,这使得我才不那么抵触,直到现在,习惯了面向对象之后,也 ...
- Python数据模型建立
基本结构AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pri ...
- Python 数据模型
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 一摞Python风格的纸牌 from collections impo ...
- 流畅的python第一章python数据模型学习记录
python中有些特殊的方法,以双上下划线开头,并以双下划线结束的方法.如__getitem__,这些方法是特殊的方法,供python解释权内部使用,一般来说不需要调用 还有一种是以双下划线开头的,如 ...
随机推荐
- 添加 node mocha 测试模块
1.mocha 支持TDD 和 BDD两种测试风格 2.引用assert模块 此模块是node的原生模块,实现断言的功能,作用是声明预期的结果必须满足 3.mocha测试用例中可以使用第三方测试库 ...
- 【mmall】IDEA插件jrebel
破解方法 http://www.jianshu.com/p/87b11bad3d7f
- centos设置服务开机启动失败问题
1.安装某服务设置开机启动的时候报错 [root@node1 ~]# systemctl enable lvm2-lvmetad.serviceThe unit files have no [Inst ...
- Netty实现简单UDP服务器
本文参考<Netty权威指南> 文件列表: ├── ChineseProverbClientHandler.java ├── ChineseProverbClient.java ├── C ...
- understand 在windows 以及 unbuntu 下的安装
1.win7 64位下安装 1)下载Understand.4.0.908.x64.rar. 2)解压之,直接运行里面的Understand-4.0.908-Windows-64bit.exe. 3)选 ...
- 【转】python类中super()和__init__()的区别
[转]python类中super()和__init__()的区别 单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(se ...
- sort和uniq去重操作【转】
去除重复行 sort file |uniq 查找非重复行 sort file |uniq -u 查找重复行 sort file |uniq -d 统计 sort file | uniq - ...
- Windows PowerShell 入門(5)-制御構文
Windows PowerShellにおける制御構文について学びます.数ある制御構文の中でもSwitch文は.他の言語に比べ豊富な機能が用意されています. 対象読者 Windows PowerShel ...
- nginx指定文件路径有两种方式root和alias
背景 一直没明白这个配置啥意思,反正凑合用吧,不过老凑合总不是个事,没搞明白更容易忘,别人问还答不上来.反正也很简单,就搞明白点记下来. 知识点 root实例: location ^~ /t/ { r ...
- daemon.debug hostapd: wlan0: WPA rekeying GTK
现象描述:client连接上AP后,切换接口(譬如lan口的)模式,静态地址和dhcp模式切换后,一段时间后断开连接,再也连接不上,ap侧日志如下: Wed Nov 8 14:39:31 2017 ...