内部 class 与 namedtuple()

Inner class with namedtuple()

我正在尝试使用 collections.namedtuple 将字典转换为 python 对象。

import Zabbix

class Foo:

  def bar(self):
    collections.namedtuple('Zabbix.Request',['b','c'])

结果是

ValueError: Type names and field names must be valid identifiers: 'Zabbix.Request'

我的简单解决方法是扩展 Foo

内部的 class
import Zabbix

class Foo:

  class Request(Zabbix.Request):
    pass

  def bar(self):
    collections.namedtuple('Request',['b','c'])

有没有更好的方法?目前使用 python 3.4

您不能为类型指定名称 Zabbix.Request,因为这是无效的语法(例如 class Zabbix.Request:)。因此,您也无法使用该名称创建 namedtuple

您修改后的代码与第一个代码示例不同:您现在正在创建一个名称为 Requestnamedtuple。这是允许的,因为 Request 是类型的有效标识符。