Определите список с типом - PullRequest
2 голосов
/ 17 декабря 2009

Я пришел из Java и хочу сделать объекты передачи данных (DTO), например:

class ErrorDefinition():
    code = ''
    message = ''
    exception = ''

class ResponseDTO():
    sucess = True
    errors = list() # How do I say it that it is directly of the ErrorDefinition() type, to not import it every time that I'm going to append an error definition?

Или есть лучший способ сделать это?

Ответы [ 5 ]

5 голосов
/ 17 декабря 2009

Python динамически типизирован, и вы просто не объявляете типы для переменных, как в Java. На этом этапе настоятельно рекомендуется прочитать официальное руководство .

1 голос
/ 18 декабря 2009

errors = list () # Как мне сказать, что он имеет тип ErrorDefinition (), чтобы не импортировать его каждый раз, когда я собираюсь добавить определение ошибки?

Я не уверен, что вы пытаетесь сказать в этом комментарии, но, если я правильно понимаю, лучший способ приблизиться - определить метод добавления ошибки.

class ResponseDTO(object): # New style classes are just better, use them.

    def __init__(self):
        self.success = True # That's the idiomatic way to define an instance member.
        self.errors = [] # Empty list literal, equivalent to list() and more idiomatic.

    def append_error(self, code, message, exception):
        self.success = False
        self.errors.append(ErrorDefinition(code, message, exception))
0 голосов
/ 18 декабря 2009

Пожалуйста, объясните, что вы подразумеваете под "импортировать каждый раз".

Вам необходимо пересмотреть вопрос об использовании атрибутов уровня класса, прежде чем изучать, что именно они делают, особенно когда вы используете изменяемые типы, такие как списки. Учтите это:

>>> class Borg(object):
...     alist = list()
...
>>> a = Borg()
>>> b = Borg()
>>> a.alist.append('qwerty')
>>> a.alist
['qwerty']
>>> b.alist
['qwerty']
>>>

Не то, что вы хотели? Используйте обычный язык Python для настройки того, что вам нужно, в методе __init__ класса:

>>> class Normal(object):
...     def __init__(self):
...         self.alist = list()
...
>>> x = Normal()
>>> y = Normal()
>>> x.alist.append('frobozz')
>>> x.alist
['frobozz']
>>> y.alist
[]
>>>
0 голосов
/ 18 декабря 2009

DTO - это шаблон проектирования для Java. Попытка использовать семантику Java в Python не сработает. Вам нужно выйти на другой уровень и спросить. Это проблема, которую я пытаюсь решить ... в Java я бы использовал DTO - как бы вы подошли к нему с помощью Python?

0 голосов
/ 17 декабря 2009

Я почти уверен, что вы не можете определить тип для списка. Вам потребуется каждый раз импортировать ErrorDefinition (который выглядит как уже существующий класс Exception).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...