类中用 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)
得到什么效果???
【具体问题】
几个具体的问题点:
- instance_of_SomeBase.obj 是一个类实例吗?即 “base” 类中的 obj 用 property “包装” 和 property 内部的 lambda 是怎么作用的?得到的
.obj
是什么东西? 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