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

发布于 2022-09-12 04:46:44 字数 770 浏览 24 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

誰認得朕 2022-09-19 04:46:44

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文