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