python-3.7 - 如何在 Python 上的 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))
请检查以下调试输出窗口,我没有看到已设置任何值。
另外我还有一个关于字段比较的问题namedtuple
,在我的代码中,我必须比较每个字段namedtuple
,而不是有什么方法可以namedtuple
一次比较所有字段。
解决方案
在这部分代码中,您将创建 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
推荐阅读
- algorithm - (大概)一个段树应用
- websocket - 苦苦挣扎 apollo-link-ws x-api-key 授权
- python - Python 计算轮班工作的休息日
- javascript - 来自两个实体集的 xml 视图绑定数据
- cmake - CMake 没有抱怨不存在的文件吗?
- yaml - ruamel.yaml.round_trip_dump 预期为 4,但找到 2(缩进)
- javascript - JavaScript Mocha 初始集成测试比其他测试花费更长的时间
- java - 在 Java 中使用工厂设计模式
- ios - 如何快速创建带有分钟和秒的倒数计时器?
- javascript - 生成一个对象