<p>我确信您在使用类时会犹豫,因为需要编写样板代码。你知道吗</p>
<p>但是有一个很好的图书馆可以让你的生活更轻松:<a href="https://attrs.readthedocs.io/en/stable/" rel="nofollow">^{<cd1>}</a>。你知道吗</p>
<p>Glyph有一个带有自述标题的帖子:<a href="https://glyph.twistedmatrix.com/2016/08/attrs.html" rel="nofollow">The One Python Library Everyone Needs</a>。当然,这是一篇固执己见的文章,但这里引用了它的<a href="https://attrs.readthedocs.io/en/stable/examples.html" rel="nofollow">Examples page</a>:</p>
<blockquote>
<pre><code>>>> @attr.s
... class Coordinates(object):
... x = attr.ib()
... y = attr.ib()
</code></pre>
<p>By default, all features are added, so you immediately have a fully functional data class with a nice <code>repr</code> string and comparison methods.</p>
<pre><code>>>> c1 = Coordinates(1, 2)
>>> c1
Coordinates(x=1, y=2)
>>> c2 = Coordinates(x=2, y=1)
>>> c2
Coordinates(x=2, y=1)
>>> c1 == c2
False
</code></pre>
</blockquote>
<p>这是一个相当方便的图书馆,所以去看看吧。你知道吗</p>
<p>以下是<code>User</code>类的示例:</p>
<pre><code>import attr
@attr.s
class User(object):
id = attr.ib()
firstName = attr.ib()
surname = attr.ib()
age = attr.ib()
@property
def name(self):
return '{0.firstName} {0.surname}'.format(self)
user_dict = {'id': 1, 'firstName': 'Bar', 'surname': 'Foosson', 'age': 20}
user = User(**user_dict)
assert user.name == 'Bar Foosson'
</code></pre>