gpt4 book ai didi

python - 具有附加重要性参数的命名空间

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:05 24 4
gpt4 key购买 nike

我正在尝试定义一个类似 namespace 的对象,该对象可以具有重要参数。这很有用,这样我就可以为对象实现一个散列函数,该函数只会对标记为重要的成员进行散列。我希望 API 尽可能接近命名空间风格,但据我所知,没有简单的方法可以做到这样的事情

n = MyNamespace()
n.a = (1, True)

并将 1 存储在 __dict__ 中,而 True 将存储在其他维护 1< 知识的字典中 很重要。

我可以想出一种使用 setter 来完成此操作的方法,就像这样,但这有点笨拙且非 Pythonic,并且需要一种丑陋的成对元组直接实例化方式。

class SignificantNamespace(object):
def __init__(self, *args):
self.significant = {}
for name, val, significance in args:
setattr(self, name, val)
self.significant[name] = significance

def set(self, name, val, significant=True):
setattr(self, name, val)
self.significant[name] = significant

大家觉得怎么样?有没有更好/更干净的方法来做到这一点?

最佳答案

如果我理解正确,你可以这样做:

class MyNamespace(object):

def __hash__(self):
"""Only hash dict key pairs that are significant"""
d_keys = sorted(self.__dict__.keys())
to_hash = []
for k in d_keys:
v = self.__dict__[k]
if v[1]:
to_hash.append((k, v[0]))
return hash(frozenset(to_hash))

def get_signifcant_dict(self):
return {k: v[0] for k, v in self.__dict__.items() if v[1]}

使用示例:

>>> my = MyNamespace()
>>> my.a = (1, True)
>>> my.__hash__()
-2550060783245333914
>>> my.b = (2, False)
>>> my.__hash__()
-2550060783245333914 # hash didn't change since `b` is not signifcant
>>> my.get_signifcant_dict()
{'a': 1}

关于python - 具有附加重要性参数的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41293253/

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