我来自Java,我想做一些这样的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?
或者有更好的方法吗?
答案 0 :(得分:5)
Python是动态类型的,你只是不像在Java中那样为变量声明类型。在此阶段强烈建议您阅读The official tutorial。
答案 1 :(得分: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))
答案 2 :(得分:0)
我很确定你无法为列表定义类型。您每次都需要导入ErrorDefinition(看起来像现有的Exception
类)。
答案 3 :(得分:0)
DTO是Java的设计模式。尝试在Python中使用Java语义是行不通的。你需要走出另一个级别然后问。这是我试图解决的问题......在Java中我会使用DTO - 你会如何使用Python来处理它?</ p>
答案 4 :(得分:0)
请通过“每次导入”来解释你的意思。
在您准确探究它们的作用之前,您需要重新考虑使用类级属性,尤其是在使用列表等可变类型时。考虑一下:
>>> 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
[]
>>>
答案 5 :(得分:0)
您现在可以使用type hint通过从__init__
函数中指定类型来实现。举一个简单的例子:
class Foo:
def __init__(self, value: int):
self.value = value
class Bar:
def __init__(self, values: List[Foo]):
self.values = values
有了这个,我们知道values
的{{1}}应该保存对Bar
的引用列表; Foo
中的value
应该是整数。让我们看看当我们错误地使用它时拥有什么:
Foo
答案 6 :(得分:0)
您可以将列表输入为python 3.8.4
https://docs.python.org/3/library/typing.html
from typing import List
Vector = List[float]
Python是动态输入的,但是https://www.python.org/dev/peps/pep-0484/ 键入使读取代码,理解代码,有效使用IDE工具和创建更高质量的软件变得更加容易。我想这就是它在PEP中的原因。