首页 > 解决方案 > 如何将对象给关键字参数作为键

问题描述

我想做的是这样

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}")

标签: pythondictionaryobjectkeyword-argument

解决方案


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") 

推荐阅读