<p>使用<a href="https://docs.python.org/3/library/dataclasses.html" rel="nofollow noreferrer">dataclass</a>:</p>
<pre><code>@dataclass
class MarkdownIsOpen:
ChapterOpen: bool = False
SectionOpen: bool = False
ArticleOpen: bool = False
</code></pre>
<p>或者:</p>
^{pr2}$
<p>请注意,这需要Python3.7。在</p>
<p>如果使用Python<;=3.6,那么普通类也可以。类并不昂贵,它们向用户提供了一个提示:您的函数不需要任何旧的<code>dict</code>-类,而是一个具有以下属性的<em>特殊</em>容器。在</p>
<p>例如,将其与C的<code>struct</code>或Scala的{<cd3>}进行比较,它们的作用基本相同。在</p>
<p>此外,您甚至可以重写<code>__slots__</code>和/或<code>__getitem__</code>以允许类似<code>dict</code>的访问,并阻止添加新属性:</p>
<pre><code>class MarkdownIsOpen:
__slots__ = ('ChapterOpen', 'SectionOpen', 'ArticleOpen')
def __init__(self):
self.ChapterOpen = False
self.SectionOpen = False
self.ArticleOpen = False
def __getattr__(self, key):
return getattr(self, key)
def __setattr__(self, key, value):
setattr(self, key, value)
</code></pre>
<p>示例:</p>
<pre><code>m = MarkdownIsOpen()
m['ChapterOpen'] = True
print(m['SectionOpen'])
m['Nonexistent'] = False
</code></pre>
<p>输出:</p>
<pre><code>False
AttributeError: 'MarkdownIsOpen' object has no attribute 'Nonexistent'
</code></pre>