类中用 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(类)有关系吗?

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

阅读 3.8k
2 个回答

推荐《流畅的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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题