摘要:第一章数据类型隐式方法利用快速生成字典方法方法通过下标找元素自动支持切片操作可迭代方法与如果是一个自定义类的对象,那么会自己去调用其中由你实现的方法。若返回,则会返回否则返回。一个对象没有函数,解释器会用作为替代。
第一章 python数据类型 1 隐式方法
利用collections.namedtuple 快速生成字典
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]1.1 __getitem__方法
deck = FrenchDeck()
>>> deck[0] Card(rank="2", suit="spades") >>> deck[-1] Card(rank="A", suit="hearts")
__getitem__方法
通过下标找元素
自动支持切片(slicing)操作
可迭代
1.2 __len__方法 与 len(my_object)如果my_object 是一个自定义类的对象,那么 Python 会自己去调用其中由 你实现的 len 方法。
Python 内置的类型,比如列表(list)、字符串(str)、 字节序列(bytearray)等,那么 CPython
会抄个近路,__len__ 实际 上会直接返回 PyVarObject 里的 ob_size 属性。
背后其实用的是 iter(x)
而这个函数的背后则是 x.__iter__() 方法。
比如 foo 之类的
因为虽然现在这个名字没有被 Python 内部使用,以后就不一定了
>>> from random import choice >>> choice(deck) Card(rank="3", suit="hearts") >>> choice(deck) Card(rank="K", suit="spades") >>> choice(deck) Card(rank="2", suit="clubs")2 字符串表示形式 repr 和 str
__repr__和__str__这两个方法都是用于显示的
__str__是面向用户的,而__repr__面向程序员。
一个对象没有 str 函数,解释器会用 repr 作为替代。
3 算术运算符add 和 __mul__,类带来了 + 和 * 这两个算
术运算符。
列表项目bool(x) 的背后是调用x.__bool__() 的结果;
如果不存在 bool 方法,那么 bool(x) 会尝试调用 x.__len__()。
若返回 0,则 bool 会返回 False;否则返回True。
5 其他隐式方法请见 书1.3 特殊方法一览 小总结
collections.namedtuple 快速生成字典
__getitem__方法
通过下标找元素
自动支持切片(slicing)操作
可迭代
len()
len(my_obj )自定义类的对象,自定义实现的 len 方法。
python内置类型,通过内部类型的属性直接取得
repr__和__str
__repr__和__str__这两个方法都是用于显示的
__str__是面向用户的,而__repr__面向程序员。
一个对象没有 str 函数,解释器会用 repr 作为替代。
from random import choice 一个随机选取的轮子
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41537.html
摘要:第一章数据类型隐式方法利用快速生成类方法方法通过下标找元素自动支持切片操作可迭代方法与如果是一个自定义类的对象,那么会自己去调用其中由你实现的方法。若返回,则会返回否则返回。一个对象没有函数,解释器会用作为替代。 第一章 python数据类型 1 隐式方法 利用collections.namedtuple 快速生成类 import collections Card = collec...
摘要:例如,的序列协议只需要和两个方法。任何类如,只要使用标准的签名和语义实现了这两个方法,就能用在任何期待序列的地方。方法开放了内置序列实现的棘手逻辑,用于优雅地处理缺失索引和负数索引,以及长度超过目标序列的切片。 序列的修改、散列和切片 接着造Vector2d类 要达到的要求 为了编写Vector(3, 4) 和 Vector(3, 4, 5) 这样的代码,我们可以让 init 法接受任...
摘要:以便于用户理解的方式返回对象的字符串表示形式。函数会调用函数,对来说,输出的是一个有序对。此外,还有用于支持内置的构造函数的方法。可散列实现了方法,使用推荐的异或运算符计算实例属性的散列值私有属性最好用命名规则来实现这种方式有好有坏 绝对不要使用两个前导下划线,这是很烦人的自私行为。——Ian Bicking 对象表示形式 repr() 以便于开发者理解的方式返回对象的字符串表示形式...
摘要:前言并发编程的目的是让程序跑的更快,但并不是启动更多的线程,这个程序就跑的更快。尽可能降低上下文切换的次数,有助于提高并发效率。死锁并发编程中的另一挑战是死锁,会造成系统功能不可用。 前言 并发编程的目的是让程序跑的更快,但并不是启动更多的线程,这个程序就跑的更快。有以下几种挑战。 挑战及方案 上下文切换 单核CPU上执行多线程任务,通过给每个线程分配CPU时间片的方式来实现这个机制。...
摘要:可以赋值对象的生命周期主要是有创建初始化销毁。显示而非隐式对于每个方法,都应当显示的制定要初始化的变量。每当创建一个对象,会创建一个空对象,然后调用该对象的函数,提供了初始化的操作。以点为例作为说明。 第一部分 用特殊方法实现Python风格的类 为了实现更好的可扩展性,Python语言提供了大量的特殊方法,它们大致分为以下几类。 特性访问 可调用对象 集合 数字 上下文 迭代器 ...
阅读 1110·2021-09-22 16:04
阅读 1492·2019-08-30 15:43
阅读 1095·2019-08-29 14:01
阅读 3437·2019-08-26 12:19
阅读 3351·2019-08-26 12:15
阅读 1442·2019-08-26 12:13
阅读 3261·2019-08-23 17:00
阅读 1482·2019-08-23 15:38