Python 具有其他重要参数的命名空间

Python 具有其他重要参数的命名空间,python,Python,我试图定义一个类似名称空间的对象,它可以具有重要参数。这很有用,因此我可以为对象实现一个哈希函数,该函数只对标记为重要的成员进行哈希。我希望API尽可能接近名称空间样式,但就我所知,没有一种简单的方法可以像 n = MyNamespace() n.a = (1, True) 将1存储在\uuu dict\uuu中,而True将存储在其他一些词典中,这些词典保持了1的重要性 我可以想出一种使用setter的方法,就像这样,但这有点笨重,不符合python,需要一种丑陋的成对元组直接实例化方式 c

我试图定义一个类似名称空间的对象,它可以具有重要参数。这很有用,因此我可以为对象实现一个哈希函数,该函数只对标记为重要的成员进行哈希。我希望API尽可能接近名称空间样式,但就我所知,没有一种简单的方法可以像

n = MyNamespace()
n.a = (1, True)
1
存储在
\uuu dict\uuu
中,而
True
将存储在其他一些词典中,这些词典保持了
1
的重要性

我可以想出一种使用setter的方法,就像这样,但这有点笨重,不符合python,需要一种丑陋的成对元组直接实例化方式

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}
“尽可能接近名称空间样式”是什么意思?比如
argparse
?另外,通过哈希函数,您的意思是为您的类实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,对吗?