我正在尝试方便地将一些参数集传递给许多函数(比如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
始终只有相关字段,这是传递参数的好方法吗?
答案 0 :(得分:3)
一般来说使用obj.__dict__
是一个坏主意,因为对象字典不包含任何描述符或对象上可能存在的其他“魔术”属性。它还将包含隐藏的属性,按照惯例,隐藏在_
前缀后面。因此,obj.__dict__
技术实际上仅适用于完全基本类型,如果您决定将任何属性更新为属性,以便您可以控制其getter / setter等,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}
答案 1 :(得分:2)
Namedtuple直接为你做这件事。
这是talk from PyCon US 2011 [11:35 - 26:00]
from collections import namedtuple
Add = namedtuple("Add", "a b c d")
one = Add(1, 2, 3, 4)
def addme(a, b, c, d):
print a + b
print c + d
>>> addme(*one)
... 3
... 7
答案 2 :(得分:0)
for attribute, attribute_value in obj.__dict__.items(): # or obj.__dict__.iteritems()
print attribute, attribute_value