擅长:python、mysql、java
<p>另一种选择是设置属性的@juanpa.arrivillaga解决方案,它看起来更面向对象,最初是在<a href="https://web.dehttps://mail.python.org/pipermail/python-list/2020-June/897506.html" rel="nofollow noreferrer">python-list by Peter Otten</a>提出的</p>
<pre><code>import dataclasses
from typing import Optional
@dataclasses.dataclass
class FileObject:
uploaded_by: Optional[str] = None
class FileObjectExpensive(FileObject):
@property
def uploaded_by(self):
return self._uploaded_by
@uploaded_by.setter
def uploaded_by(self, uploaded_by):
print('Setter Called with Value ', uploaded_by)
self._uploaded_by = uploaded_by
def save(self):
print(self.uploaded_by)
p = FileObjectExpensive()
p.save()
p2 = FileObjectExpensive(uploaded_by='Already Computed')
p2.save()
</code></pre>
<p>这将产生:</p>
<pre><code>Setter Called with Value None
None
Setter Called with Value Already Computed
Already Computed
</code></pre>
<p>对我来说,这种方法虽然在删除样板文件方面并不完美,但在分离纯数据容器和数据行为方面更具可读性和明确性。而且它保持所有变量和属性的名称相同,因此可读性似乎是相同的</p>