我正在尝试方便地将一些参数集传递给多个函数(比如 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/