2015-02-25 3 views
4

Я пытаюсь использовать collections.namedtuple для преобразования словаря в объект python.Внутренний класс с namedtuple()

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

import Zabbix 

class Foo: 

    class Request(Zabbix.Request): 
    pass 

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

Есть ли лучший способ? В настоящее время используется python 3.4

+0

Что именно вы пытаетесь сделать здесь? Ничего из этого не имеет никакого смысла. – tzaman

+1

Ваш метод 'bar' не возвращает namedtuple, поэтому он ничего не делает. Чего вы пытаетесь достичь, поставив «Zabbix.Request» в качестве имени namedtuple? – BrenBarn

ответ

5

Вы не можете указать тип Zabbix.Request, потому что это недопустимый синтаксис (например, class Zabbix.Request:). Таким образом, вы также не можете создать namedtuple с этим именем.

Ваш модифицированный код не эквивалентен первому образцу кода: теперь вы создаете namedtuple с именем Request. Это разрешено, так как Request будет действительным идентификатором для типа.

Смежные вопросы