相关疑难解决方法(0)

如何"完美"覆盖一个字典?

我怎样才能使"完美"成为dict的子类?最终目标是有一个简单的字典,其中键是小写的.

似乎应该有一些微小的原语我可以覆盖以使这项工作,但根据我的所有研究和尝试似乎情况并非如此:

这是我的第一次尝试,get()不起作用,毫无疑问还有许多其他小问题:

class arbitrary_dict(dict):
    """A dictionary that applies an arbitrary key-altering function
       before accessing the keys."""

    def __keytransform__(self, key):
        return key

    # Overridden methods. List from 
    # https://stackoverflow.com/questions/2390827/how-to-properly-subclass-dict

    def __init__(self, *args, **kwargs):
        self.update(*args, **kwargs)

    # Note: I'm using dict directly, since super(dict, self) doesn't work. …
Run Code Online (Sandbox Code Playgroud)

python inheritance dictionary get set

204
推荐指数
5
解决办法
10万
查看次数

Python中UserDict类的优点

使用UserDict类有什么好处?

我的意思是,如果不是,我真的得到了什么

class MyClass(object):
    def __init__(self):
        self.a = 0
        self.b = 0
...
m = MyClass()
m.a = 5
m.b = 7
Run Code Online (Sandbox Code Playgroud)

我会写以下内容:

class MyClass(UserDict):
    def __init__(self):
        UserDict.__init__(self)
        self["a"] = 0
        self["b"] = 0
...
m = MyClass()
m["a"] = 5
m["b"] = 7
Run Code Online (Sandbox Code Playgroud)

编辑:如果我理解正确,我可以在两种情况下都在运行时向对象添加新字段?

m.c = "Cool"
Run Code Online (Sandbox Code Playgroud)

m["c"] = "Cool"
Run Code Online (Sandbox Code Playgroud)

python oop

16
推荐指数
4
解决办法
2万
查看次数

如何检测dict修改?

我已经分类dict并且需要检测它的所有修改.

(我知道我无法检测到存储值的就地修改.没关系.)

我的代码:

def __setitem__(self, key, value):
    super().__setitem__(key, value)
    self.modified = True

def __delitem__(self, key):
    super().__delitem__(key)
    self.modified = True
Run Code Online (Sandbox Code Playgroud)

问题是它只适用于简单的分配或删除.它未检测到所做的更改pop(),popitem(),clear()update().

为什么__setitem____delitem__当项目被添加或删除绕过?我是否还必须重新定义所有这些方法(pop等等)?

python dictionary

10
推荐指数
1
解决办法
304
查看次数

为什么在Python中没有定义UserSet类?

为什么python不提供UserSet扩展和定义用户定义Set的类。它确实提供了UserDictUserListUserString但没有UserSet

我指的是Python文档

python python-3.x

5
推荐指数
1
解决办法
198
查看次数

标签 统计

python ×4

dictionary ×2

get ×1

inheritance ×1

oop ×1

python-3.x ×1

set ×1