微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一些带有 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 举报,一经查实,本站将立刻删除。