gpt4 book ai didi

python - 最Pythonic的方式来处理(1)对象类型的一般属性和(2)该对象实例的单独属性

转载 作者:行者123 更新时间:2023-12-01 05:56:51 25 4
gpt4 key购买 nike

首先是一般性解释,然后是我实际正在研究的内容:假设您有一组苹果。有些属性可以共享,例如 type = "Green Apple"picked_date = "Aug 12 2012" ,但其他数据在苹果之间可能有所不同,例如 is_bruisedweightsize 。在苹果之间共享可编辑值的最Pythonic方式是什么,例如type而且组中的每个苹果都有单独的属性?来自C , C++ ,我的第一直觉是一个通用结构,以及每个苹果的一个结构,并带有指向通用结构的指针,因为每个苹果实例包含组信息似乎很愚蠢,因为如果我想要 type = "Red Apple"我必须遍历所有苹果才能编辑它们的 type值,这是对编程能力的浪费。

在实际代码中,在我当前的工作项目中,我目前正在编写一个 git 脚本,以帮助以对我的公司有意义的方式解析输出。我一直在阅读 Python 中的 (a) 列表、(b) 元组、(c) 字典和 (d) 类,并且我真的一直在努力找出表示这些数据的最佳方式。

具体来说,我正在处理 git 提交,并且我关心两种类型的值:所有提交之间共享的通用属性,例如“我是否打印出提交的作者?”以及特定属性例如“提交 x 有作者 y”。我当前的解决方案不太优雅:

class Commit(object):
def __init__(self, author="", committer="", date="", issue="",
instruction="", message="", review="", sha="", short=""):
self.author = author
self.committer = committer
self.date = date
self.instruction = instruction
self.issue = issue
self.message = message
self.review = review
self.sha = sha
self.short = short

此类包含与特定提交关联的数据。现在,所有提交的数据都存储如下:

 Attribute = namedtuple('Attribute', ['display', 'critical'])

commit_attr = {'author': Attribute(display = True, critical = True),
'committer': Attribute(display = True, critical = True),
'date': Attribute(display = False, critical = False),
'instruction': Attribute(display = True, critical = False),
'issue': Attribute(display = True, critical = False),
'message': Attribute(display = True, critical = False),
'review': Attribute(display = True, critical = False),
'sha': Attribute(display = True, critical = True),
'short': Attribute(display = True, critical = True)}

这是一个带有字段命名元组的字典。 “Critical”表示提交中是否需要该字段才能显示,显示用于确定是否应该打印它。

这是我的问题:我知道python中的相关数据应该以连贯的方法分组,但我不知道如何在这里做到这一点:我可以有一个“指针”,例如self.attr = commit_attrCommit()类,但这不是很干净,并且取决于该对象保持其地址,即可变,否则如果我更改通用属性的值,它将不再与 Commit() 关联。类。

最佳答案

我不完全确定这对您是否有帮助,但 Python 具有类属性,这些属性在类实例之间共享:

>>> class A(object):
... foo = 'bar' # Notice that this isn't in an __init__ function definition
...
>>> a = A() # Just creating two distinct instances of A
>>> b = A()
>>> A.foo = 'baz' # Now, I'm setting the class attribute
>>> b.foo
'baz' # Notice how all instances of A changed
>>> a.foo
'baz'
>>>

编辑类属性会同时影响所有实例。

关于python - 最Pythonic的方式来处理(1)对象类型的一般属性和(2)该对象实例的单独属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082104/

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