如何将对象作为关键字参数提供给关键字参数

how to give object to keyword argument as key

我想做的是这样的

class Foo:
    def __init__(self):
        self.name = "james"

def foo(**kwargs):
    for obj, new_name in kwargs.items():
        obj.name = new_name

f = Foo()
foo(f="Tom")  # f have to be recognized as an object not a string "f"

据我所知,kwargs 是一本字典。

我测试了给一个对象作为字典中的键。和字典可以有一个对象作为键。

dd = {f: 12}
print(dd)

>>>
{<__main__.Foo object at 0x00D685D0>: 12}

但是当我给函数的参数一个对象作为键时,它变成了字符串 "f".

有没有不破坏原有语法的方法

function(obj=value, obj2=value2, ...)

不是这样的

function((obj, value), (obj2, value2), ...)
    proper process to tuple

编辑:在函数中使用此代码

    obj = getattr(sys.modules[__name__], f"{obj_name}")

kwargs 是一个字典,将每个关键字映射到我们传递给它的值。这就是为什么当我们遍历 kwargs 时,它们的打印顺序似乎没有任何顺序。

def myFun(**kwargs):  
    for key, value in kwargs.items(): 
        print ("%s == %s" %(key, value)) 

# Driver code 
myFun(first ='Geeks', mid ='for', last='Geeks') 

你可以去寻找 **args
** 符号在参数前使用,用于将关键字参数字典传递给函数,这种语法用于在我们不知道将向函数发送多少关键字参数时成功地 运行 代码。

# function definition 
def displayArgument(**arguments):  
    for arg in arguments.items(): 
        print(arg) 

# function call 
displayArgument(argument1 ="hello", argument2 = 4, 
                argument3 ="code") 

显然我们不能使用除字符串以外的任何其他类型作为键类型。

在此处查看详细答案:

在此处查看源代码: https://github.com/python/cpython/blob/2ec70102066fe5534f1a62e8f496d2005e1697db/Python/getargs.c#L1604