【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充


未完,一会更~

C19:动态属性和特性

19.1 使用动态属性转换数据

自测

**1. getattr(self, name)什么时候会被调用? **
2. 如何检查输入的是否为关键字,如class?
3. __new__作用
**4.__new__可以替代什么写法 **

答案

1.
当调用不存在的属性时。
【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充
另外即便一次性想要得到多个值的属性,getattr还是会一个个来。
额外提个问,怎么样能让它这个属性获取完了,再根据这个属性获得的值获得下个属性的值呢,我想表达的是如何做到feed.schedule.speakers,作者用了类方法来不断改变类的属性,这就能让我们获取到了。
【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充
2.
【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充
3.
__new__真正的构造方法,而我们说__init__ 是从其他语言借来的术语,但其实称为初始化方法更合适。
因为__init__要传入实例,且不能放回任何参数,因此__new__必须返回一个实例。返回的实例会作为第一个参数(即 self)传给 __init__方法。
所以,可以推测当两个构造方法同时出现在函数中时,__init__是在__new__执行成功后执行的,因为__init__需要它的参数。
以下就是两者交互一个最简单而直观的例子:
【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充
标准的写法初始化的第一步并不是直接传出一个参数,而是用super().__new__(cls)
【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充


书上的例子:
蓝色方框,还记得我说的吗,在自己的类中调用自己的构造方法,要用类来实现。

【流畅的python】笔记(C19:动态属性和特性)自测知识点和书籍补充


4.
@classmethod装饰器