【问题标题】:How to set the field values in namedTuple on Python?如何在 Python 上的 namedTuple 中设置字段值?
【发布时间】:2019-10-31 12:45:04
【问题描述】:

在我的 pytest (python 3.7.4) 中,我有定义和设置 namedtuple 字段值的测试方法。但是,尽管我在代码中设置了值,但实际上并没有看到该字段中设置的任何值。

def test_TapVisaCardOnTheReader(Process):
    ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
    ResponseResults('01', True, True, True)
    TapResponseResults=Process.TappingPaymentCardOntheReader(' Visa-Card ')
    assert ((ResponseResults.STATUS == TapResponseResults.STATUS) and (
            ResponseResults.ISO8583 == TapResponseResults.ISO8583) and (
                    ResponseResults.TOKEN == TapResponseResults.TOKEN) and (
                    ResponseResults.ICC_PUBLIC_KEY == TapResponseResults.ICC_PUBLIC_KEY))

请检查以下调试输出窗口,我没有看到已设置任何值。

另外我还有一个关于比较namedtuple 字段的问题,在我的代码中我必须比较namedtuple 的每个字段,而不是有什么方法可以一次比较namedtuple 的所有字段。

【问题讨论】:

    标签: python-3.7 namedtuple


    【解决方案1】:

    在这部分代码中,您创建了 ResponseResults 对象而不保存它:

    ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
    ResponseResults('01', True, True, True)
    

    你真正想要的是:

    ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
    response_results = ResponseResults('01', True, True, True)
    # continue with response_results...
    

    编辑:关于你的第二个问题:如果你想直接比较两个命名元组的所有字段,你可以使用== 运算符:

    from collections import namedtuple
    
    ResponseResults = namedtuple('ResponseResults',['STATUS', 'ISO8583', 'TOKEN', 'ICC_PUBLIC_KEY'])
    response_results = ResponseResults('01', True, True, True)
    response_results_2 = ResponseResults('01', True, True, True)
    response_results_3 = ResponseResults('01', True, True, False)
    
    response_results == response_results_2 # this is True
    response_results == response_results_3 # this is False
    

    【讨论】:

    • @Raj 另请参阅我的编辑以回答您的第二个问题。
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多