2009-12-17 68 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 
[] 
>>>