gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:13:02 25 4
gpt4 key购买 nike

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

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

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

class MarkdownIsOpen(object):
def __init__(self):
self.ChapterOpen = False
self.SectionOpen = False
self.ArticleOpen = False

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

如果 namedtuple 是可变的,那将是完美的。

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

最佳答案

使用 dataclass :

@dataclass
class MarkdownIsOpen:
ChapterOpen: bool = False
SectionOpen: bool = False
ArticleOpen: bool = False

或者:

MarkdownIsOpen = make_dataclass('MarkdownIsOpen', ['ChapterOpen', 'SectionOpen', 'ArticleOpen'])

请注意,这需要 Python 3.7。

如果您使用的是 Python <= 3.6,那么普通类也可以。类并不昂贵,它们向用户提示您的函数不需要任何旧的 dict,而是一个具有以下属性的特殊容器。

例如,将其与 C 的 struct 或 Scala 的 case class 进行比较,它们的用途基本相同。

此外,您甚至可以覆盖 __slots__ 和/或 __getitem__ 以允许类似 dict 的访问,并防止添加新属性:

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)

例子:

m = MarkdownIsOpen()
m['ChapterOpen'] = True
print(m['SectionOpen'])
m['Nonexistent'] = False

输出:

False
AttributeError: 'MarkdownIsOpen' object has no attribute 'Nonexistent'

关于python - 在 python 中捆绑变量的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55609053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com