gpt4 book ai didi

python - python 属性工厂和嵌套函数如何工作

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:29 25 4
gpt4 key购买 nike

在《Fluent Python》的“编写属性工厂”一节中,代码如下:

 def quantity(storage_name):   

    def qty_getter(instance):  # B   
return instance.__dict__[storage_name]

def qty_setter(instance, value):
if value > 0:
instance.__dict__[storage_name] = value
else:
raise ValueError('value must be > 0')

return property(qty_getter, qty_setter)


类行项目:
重量 = 数量('重量') # A
价格 = 数量('价格')



def __init__(自身、描述、重量、价格):
self 描述 = 描述
自重=体重
自价=价格

def 小计(自身):
返回 self.weight * self.price

在“A”中只传递一个参数,但在函数量中接收两个参数:storage_name和instance。我很困惑“B”中的参数“实例”如何传递给 qty_getter

最佳答案

函数quantity构建并返回由语句return property(qty_getter, qty_setter)定义的属性实例。

该属性本身包含两个嵌套函数 qty_getterqty_setter。封闭函数可以访问父函数的参数(以类似于闭包的方式)。

当您调用 self.weight (在小计函数中)时,您是在告诉 python 调用分配给 self 的属性的 getter 函数 (qty_getter) .权重.

通过属性契约,向 getter(或 setter)函数提供保存属性本身的对象实例(本例中为 LineItem),该实例又可以访问 storage_name 变量.

关于python - python 属性工厂和嵌套函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46900824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com