如何在Python上的namedTuple中设置字段值?

时间:2019-10-31 12:45:04

标签: python-3.7 namedtuple

在我的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))

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

OutputWindow 另外,我还有一个关于namedtuple字段比较的问题,在我的代码中,我必须比较namedtuple的每个文件,而没有任何方法可以比较namedtuple的所有字段一次。

1 个答案:

答案 0 :(得分:0)

在代码的这一部分中,您创建了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