类中用 property 的代码:`obj = property(lambda self: object(), ...)` 解释

类中用 property 的代码:`obj = property(lambda self: object(), ...)` 解释

注:标题因为字数限制,代码不全;请看下面正文是(问题的)“完整”代码。

一份 python 库中的源码节选:

【问题源码】

class SomeBase(object):

def __init__(self, ...):

...

obj = property(lambda self: object(), lambda self, v: None, lambda self: None) # default

其中 「...」 表示省略。

【使用】

在调用的时候,如:

func(instance_of_SomeBase.obj)

得到什么效果???

【具体问题】

几个具体的问题点:

  1. instance_of_SomeBase.obj 是一个类实例吗?即 “base” 类中的 obj 用 property “包装” 和 property 内部的 lambda 是怎么作用的?得到的 .obj 是什么东西?
  2. func(instance_of_SomeBase.obj) funct 内得到的第一个参数 obj,这个 obj 和 SomeBase(类)有关系吗?

如果描述有什么不足的地方,可以在评论区指出,我可以再编辑补充。


回答:

https://docs.python.org/3/how... 仔细读下


回答:

推荐《流畅的Python》元编程一章有对property(特性)细致的解释
简单而言,property在不改变类接口的前提下,使用存取方法( 即读值方法和设值方法)修改数据属性。

v = instance_of_SomeBase.obj

调用 lambda self: object(),这里 self就是instance_of_SomeBase,

instance_of_SomeBase.obj = v

调用 lambda self, v: None , 没有做任何事情

del instance_of_SomeBase.obj

调用 lambda self: None

func(instance_of_SomeBase.obj) 是第一种情况:取值,返回一个object,这个object和instance_of_SomeBase没有什么关系了,下次 instance_of_SomeBase.obj 取值,又会新创建一个object

以上是 类中用 property 的代码:`obj = property(lambda self: object(), ...)` 解释 的全部内容, 来源链接: utcz.com/a/161874.html

回到顶部