Python 实例“\uuu dict\uuu”的关键字参数解包有哪些陷阱?

Python 实例“\uuu dict\uuu”的关键字参数解包有哪些陷阱?,python,arguments,argument-unpacking,Python,Arguments,Argument Unpacking,我试图方便地将一些参数集传递给一些函数,比如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个相同的参数

我试图方便地将一些参数集传递给一些函数,比如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总是只有相关字段是传递参数的好方法吗?

直接这样做

这里是[11:35-26:00]

这完全是为了你

这里是[11:35-26:00]


一般来说,使用obj是个坏主意。因为对象字典不包含任何描述符或对象上可能存在的其他神奇属性。它还将包括按照惯例隐藏在uu前缀后面的隐藏属性。因此,obj.\uuu dict\uuuu技术实际上只适用于完全基本的类型,如果您决定将任何属性更新为属性以便可以控制它们的getter/setter等,则它不是未来的证明。varsobj也有同样的问题

类矩形对象: x=0 y=0 _宽度=0 高度=0 @财产 自我定义: 返回自我宽度 @宽度设定器 定义宽度自身,值: 如果值<0: 值=-值 self.x-=值 自身宽度=值 >>>r=矩形 >>>条例草案__ {} >>>这是因为到目前为止,所有内容都是类级属性 >>>r.宽度=50 >>>条例草案__ {“U宽度”:50}
一般来说,使用obj是个坏主意。因为对象字典不包含任何描述符或对象上可能存在的其他神奇属性。它还将包括按照惯例隐藏在uu前缀后面的隐藏属性。因此,obj.\uuu dict\uuuu技术实际上只适用于完全基本的类型,如果您决定将任何属性更新为属性以便可以控制它们的getter/setter等,则它不是未来的证明。varsobj也有同样的问题

类矩形对象: x=0 y=0 _宽度=0 高度=0 @财产 自我定义: 返回自我宽度 @宽度设定器 定义宽度自身,值: 如果值<0: 值=-值 self.x-=值 自身宽度=值 >>>r=矩形 >>>条例草案__ {} >>>这是因为到目前为止,所有内容都是类级属性 >>>r.宽度=50 >>>条例草案__ {“U宽度”:50}
@thg435只是不知道而已。它是不是意味着对象的“黑客式”版本要少一些。dict?你可以设置变量模块级别,如果你把它们传递给这么多人的话functions@thg435只是不知道而已。这是不是意味着对象的“黑客式”版本要少一些呢?\uuuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo?如果你要将变量传递给这么多函数,你可以a@Constantius您可以*解包namedtuples。我将进行编辑来描述。我不想用全名nt.a访问该字段,而只是a@Constantius您可以*解包namedtuples。我会做一个编辑来描述。对不起,我不明白你的问题在我的答案中的含义。你的问题意味着你只是想知道陷阱。对不起,在我的回答中,我不理解你的问题。你的问题意味着你只是想知道陷阱。一般来说,你应该包括一些关于你的代码如何解决这个问题的解释。在这个特殊的例子中,考虑到问题是什么,我不认为没有解释的几行代码可能是一个答案。一般来说,您应该包括一些关于代码如何解决问题的解释。在这个特殊的例子中,考虑到问题是什么,我看不出没有解释的几行代码怎么可能是答案。
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
for attribute, attribute_value in obj.__dict__.items():  # or obj.__dict__.iteritems() 
    print attribute, attribute_value