<h2><em>更新:数据类</h2>
<p>随着Python 3.7中<a href="https://docs.python.org/3/library/dataclasses.html" rel="nofollow noreferrer"><em>Data Classes</em></a>的引入,我们已经非常接近了。</p>
<p>下面的示例类似于下面的<em>NamedTuple</em>示例,但结果对象是<strong>可变的</strong>,并且允许使用默认值。</p>
<pre><code>from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
z: float = 0.0
p = Point(1.5, 2.5)
print(p) # Point(x=1.5, y=2.5, z=0.0)
</code></pre>
<p>如果您想使用更具体的类型注释,那么这可以很好地与新的<a href="https://docs.python.org/3/library/typing.html" rel="nofollow noreferrer">typing</a>模块配合使用。</p>
<p>我一直在等这个!如果你问我,<em>数据类</em>和新的<em>NamedTuple</em>声明,再加上<em>输入</em>模块是天赐良机!</p>
<h2>改进的NamedTuple声明</h2>
<p>因为<strong>Python3.6</strong>它变得非常简单和漂亮(IMHO),只要您能够忍受<strong>不变性。</p>
<p>引入了<a href="https://docs.python.org/3/library/typing.html#typing.NamedTuple" rel="nofollow noreferrer">new way of declaring NamedTuples</a>,它还允许<a href="https://docs.python.org/3/library/typing.html" rel="nofollow noreferrer">type annotations</a>:</p>
<pre><code>from typing import NamedTuple
class User(NamedTuple):
name: str
class MyStruct(NamedTuple):
foo: str
bar: int
baz: list
qux: User
my_item = MyStruct('foo', 0, ['baz'], User('peter'))
print(my_item) # MyStruct(foo='foo', bar=0, baz=['baz'], qux=User(name='peter'))
</code></pre>