文章目录
希望看完这本书写的代码好看~~
C1 py数据模型
py中下划线
1.1 一摞Python风格的纸牌
__getitem__用法
这里的__getitem__是对元素索引的封装,
和__len__是对len的封装。
调用方法,看代码即可,所以文字没有截图截完。
实现了gettitem可以进行迭代索引和切片,还可以用in来判断是否在其中。
ps:namedtuple
可以将namedtuple理解为c中的struct结构,其首先将各个item命名,然后对每个item赋予数据。用以构建只有少数属性但是没有方法的对象,比如数据库条目。
1.2 如何使用特殊方法
自测
1. 特殊方法可以直接用调用函数的方法调用吗?
** 2. Py 内置的类型底层实现是python原生语言还是cpython【】**
3. 为什么不建议代码中随意添加特殊方法?
答案
- 不可以,只能显示或者隐式的调用。也就是说没有 my_object.len() 这种写法,而应该使用 len(my_object) 。在执行len(my_object) 的时候,如果 my_object 是一个自定义类的对象,那么 Python 会自己去调用其中由你实现的 len 方法
- cpython
- 不要自己想当然地随意添加特殊方法,比如 foo 之类的,因为虽然现在这个名字没有被 Python 内部使用,以后就不一定了
1.2.2 字符串表示形式
自测
1. 实现了__repr__和 str 会在什么时候被引发
2.repr或者str谁更强大?
3. 目前有哪三种格式化字符串方法
答案
-
repr 和 str 的区别在于,_repr__在交互式环境可使用。后者是在 str() 函数被使用,或是在用 print 函数打印
一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好 -
如果你只想实现这两个特殊方法中的一个, repr 是更好的选择,因为如果一个对象没有 str 函数,而 Python 又需要调用它的时候,解释器会用 repr 作为替代。
前者方便我们调试和记录日志,后者则是给终端用户看的。这就是数据模型中存在特殊方法 repr 和 str 的原因。
这里只实现了repr可以看到,它确实能交互式的显示,也可以直接被print,也可以用str.哈哈!厉害吧!
换成str呢?
- %:python程序员更喜欢这种,因为简单
f‘{}’python3.6后才有。
format ,作者说它喜欢这种
1.3 特殊方法一览
自测
1. 增值赋值运算符做了什么,特殊方法以什么开头?
答案
- 增量赋值运算符则是一种把中缀运算符变成赋值运算的捷径( a = a * b 就
变成了 a *= b )。以i开头,如
1.4 为什么 len 不是普通方法
自测
1. 增值赋值运算符做了什么,特殊方法以什么开头?
答案
- 增量赋值运算符则是一种把中缀运算符变成赋值运算的捷径( a = a * b 就
变成了 a *= b )。以i开头,如
来源:oschina
链接:https://my.oschina.net/u/4303372/blog/4332664