本帖最后由 阿奇_o 于 2023-6-12 06:13 编辑
1. 因为None本身是个特殊的类型,其内部不包含任何数据。基本作用就是“先占个坑”。。
初始化时常用,就是告诉编译器,我这有个箱子,具体是属于什么类型、放什么东西/数据,等后面用到了在决定。
这个就不用举例子了吧,我问你吃饭了没,没有就是没有,None is None。。有就是有,吃了就是吃了,具体吃什么就看你自己了。。
2. 简单点说,就是利用装饰器的机制,把函数再套一两层逻辑,其本质就是嵌套函数(基本就两种:函数装饰器套函数,类装饰器套函数)。
另外一个关键就是:要把 函数当做一个对象(“一等对象”), func() 后面加括号才会执行其内部逻辑。
@property是“类装饰器”+“描述符/修饰器”的典型用法。
注意,property是Python内置的一个类,因为类class X天然可以be called 被调用(因为__call__),所以它天然能作为 装饰器也不奇怪。
@property 会把 点访问__doc__对象(任何X.__doc__ 这一写法/访问操作),都会根据“描述符协议”的__get__逻辑来走。
具体逻辑看官方手册Howtos指南的等价形式、或深究其源码细节。
这个property类,最大的好处就是简化代码,和返回一些需要动态查找或中间处理的属性数据。
总之,基本上,你只需要知道 @property 可以让一个方法,能像普通属性那样被访问,然后被执行,即可。(
(你甚至可以把 类的方法和普通属性,统一看做 属性Attributes。 你想想,一切不都是“对象”么?
研究对象,不就是给它起个“名”name,看看它有哪些“属性特征”,再如何“增删改查”这些属性特征数据。。)
Anyway,反正就是:对象那点事,以及逻辑与套娃的艺术。。