gpt4 book ai didi

python - instance'__dict__ 的关键字参数拆包有哪些陷阱?

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:33 25 4
gpt4 key购买 nike

我正在尝试方便地将一些参数集传递给多个函数(比如 20 个)。

考虑以下 MWE(当然我真的不考虑以这种方式进行添加):

def function(a, b):
return a + b


class summation:
def __init__(self, a, b):
self.a = a
self.b = b


s = summation(1,2)

function(**s.__dict__)

我尝试这样做的原因是我有一堆函数都接收 4 个相同的参数,我需要在管道中处理它们,从一个函数传递到另一个函数。

暗示 s 总是只有相关字段是传递参数的好方法吗?

最佳答案

通常使用 obj.__dict__ 是个坏主意,因为对象字典不包含对象上可能存在的任何描述符或其他“魔法”属性。它还将包括隐藏属性,按照惯例,这些属性隐藏在 _ 前缀后面。因此,obj.__dict__ 技术实际上只适用于完全基本的类型,如果您决定将任何属性更新为属性以便您可以控制它们的 getter/setter 等,则它不是 future 的证明。vars(obj) 有同样的问题。

class Rectangle(object):
x = 0
y = 0
_width = 0
height = 0

@property
def width(self):
return self._width

@width.setter
def width(self, value):
if value < 0:
value = -value
self.x -= value
self._width = value

>>> r = Rectangle()
>>> r.__dict__
{}
>>> # this is because everything is class-level properties so far
>>> r.width = 50
>>> r.__dict__
{'_width': 50}

关于python - instance'__dict__ 的关键字参数拆包有哪些陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312977/

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