2009-12-17 66 views
1

列表我來自爪哇,我希望做一些data transfer objects(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? 

還是有更好的方式來做到這一點?

回答

1

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

我敢肯定,你不能爲列表定義類型。您將需要每次都導入ErrorDefinition(這看起來像現有的Exception類)。

6

Python是動態類型的,你只是沒有像在Java中那樣爲變量聲明類型。強烈建議在此階段閱讀The official tutorial

+0

雖然這可能是真實的,類型提示是什麼,讓我們的生活更加美好,並幫助您避免愚蠢的錯誤。請參閱:https://www.python.org/dev/peps/pep-0484/ – Pretzel 2016-01-26 16:16:18

+0

Python有可選的類型檢查。這是針對問題的精神以及語言的意圖和能力的建議。 – ggranum 2017-12-10 17:00:27

0

DTO是Java的設計模式。嘗試在Python中使用Java語義是行不通的。你需要走出另一個層面並詢問。這是我正在嘗試解決的問題......在Java中,我將使用DTO - 您將如何使用Python進行處理?

+1

......答案通常是類似於「哦,我可以使用元組」或「哦,等等,我實際上沒有在Python中遇到過這個問題」。 ;-) – 2009-12-17 21:29:49

+0

是的,像DTO這樣複雜的設計模式對於Python來說顯示得不多,是吧? – 2009-12-17 22:15:31

0

請解釋一下「每次導入它」的含義。

在開始探究它們的功能之前,您需要重新考慮使用類級別的屬性,尤其是在使用像列表這樣的可變類型時。考慮一下:

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

不是你想要的嗎?使用建立在類的__init__方法需要什麼的普通的Python成語:

>>> class Normal(object): 
...  def __init__(self): 
...   self.alist = list() 
... 
>>> x = Normal() 
>>> y = Normal() 
>>> x.alist.append('frobozz') 
>>> x.alist 
['frobozz'] 
>>> y.alist 
[] 
>>>