在python中捆绑变量的正确方法是什么

我有三个紧密联系在一起的变量,我不想每次调用函数时都单独传递。捆绑它们的正确方法是什么。


上下文:变量的目的是在我逐字阅读文档时跟踪文档的某些属性。


我目前的方法是将它们捆绑在一个类中:


class MarkdownIsOpen(object):

    def __init__(self):

        self.ChapterOpen = False

        self.SectionOpen = False

        self.ArticleOpen = False

但这对我来说似乎有点错误,因为我不打算添加任何方法或其他功能。


如果它是可变的,那么命名元组将是完美的。


捆绑三个变量的正确(最pythonic)方法是什么?


弑天下
浏览 272回答 3
3回答

开心每一天1111

使用数据类:@dataclassclass MarkdownIsOpen:&nbsp; &nbsp; ChapterOpen: bool = False&nbsp; &nbsp; SectionOpen: bool = False&nbsp; &nbsp; ArticleOpen: bool = False或者:MarkdownIsOpen = make_dataclass('MarkdownIsOpen', ['ChapterOpen', 'SectionOpen', 'ArticleOpen'])请注意,这需要 Python 3.7。如果您使用的是 Python <= 3.6,那么普通类也可以。类并不昂贵,它们向用户提供了一个提示,即您的函数不需要任何dict类似旧的,而是具有以下属性的特殊容器。将此与例如 Cstruct或 Scala 的 进行比较case class,它们的用途大致相同。此外,您甚至可以覆盖__slots__和/或__getitem__允许dict类似访问,并防止添加新属性:class MarkdownIsOpen:&nbsp; &nbsp; __slots__ = ('ChapterOpen', 'SectionOpen', 'ArticleOpen')&nbsp; &nbsp; def __init__(self):&nbsp; &nbsp; &nbsp; &nbsp; self.ChapterOpen = False&nbsp; &nbsp; &nbsp; &nbsp; self.SectionOpen = False&nbsp; &nbsp; &nbsp; &nbsp; self.ArticleOpen = False&nbsp; &nbsp; def __getattr__(self, key):&nbsp; &nbsp; &nbsp; &nbsp; return getattr(self, key)&nbsp; &nbsp; def __setattr__(self, key, value):&nbsp; &nbsp; &nbsp; &nbsp; setattr(self, key, value)例子:m = MarkdownIsOpen()m['ChapterOpen'] = Trueprint(m['SectionOpen'])m['Nonexistent'] = False输出:FalseAttributeError: 'MarkdownIsOpen' object has no attribute 'Nonexistent'

慕娘9325324

您可以使用数据类。@dataclassclass MarkdownIsOpen:&nbsp; &nbsp; ChapterOpen: bool = False&nbsp; &nbsp; SectionOpen: bool = False&nbsp; &nbsp; ArticleOpen: bool = False

www说

可以看看这个问题:Existence of mutable named tuple in Python?凭借两个漂亮的答案:recordclass&nbsp;和namedlist可变替代命名元组
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python