当需要对象作为关键字参数但需要传递字典值时,如何使用字典?

问题描述

我有一些带有 Personfirst_namelast_name 属性age 类(这只是一个简化示例,实际类有 >30 个属性)。

>
class Person:
    def __init__(self,first_name=None,last_name=None,age=None):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        ...

我创建了这个类的一个实例并为其属性赋值。后来我用这个对象来填写我测试的网站上的数据。

person = Person(first_name="Alex",last_name="Kennedy",age=33 ...)

后来我在字典的帮助下修改了网站上的一些字段。我使用它是因为只需要更改两个字段(实际对象 >30)。

fields = {
    "first_name": "Greg","last_name": "Austin"
}

在另一个模块中,我使用 person 对象将其 first_name 与 UI 中的实际名称进行比较(person_name[1] 是我使用 Selenium 获得的列表中的第一个值)。

def open_view(self,person):
    assert first_name[1].lower() == person.name.lower()

问题

目标是验证最终结果,为此我需要使用 open_view 函数。它是用模块导入的。

如果我像这样分配 person=fields,我会收到错误,因为来自我的对象的 person.first_name 是字符串并且它不能分配给字典值。

AttributeError: 'str' object has no attribute 'first_name'

def check_result(self,person,fields):
    open_view(person=fields)

需要传递的是Person 对象,而不是字典。我不能通过像这样的 person=fields["first_name"] 因为它会出现同样的错误

如果像 open_view(fields["first_name"]) 一样按预期传递,则会发生错误TypeError: only named arguments are allowed but ('Greg',) positional arguments were passed

问题

我如何使用字典,以便它的值可以在 `open_view()` 函数中使用?

两个结构值都是字符串。

搜索了类似的问题,发现可以使用namedtuple来比较我的字典和对象。但我不清楚如何在这种情况下使用它。 可以使用哪些方法?对于任何建议,我将非常感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)