当前位置: 首页 > 面试题库 >

一个像dict一样的python类

南门棋
2023-03-14
问题内容

我想编写一个行为类似的自定义类dict-因此,我继承自dict

不过,我的问题是:我需要dict在我的__init__()方法中创建一个私有成员吗?我不明白这一点,因为dict如果我仅继承自,我已经具有了行为dict

谁能指出为什么大多数继承片段看起来像下面的片段?

class CustomDictOne(dict):
   def __init__(self):
      self._mydict = {}

   # other methods follow

而不是简单的…

class CustomDictTwo(dict):
   def __init__(self):
      # initialize my other stuff here ...

   # other methods follow

实际上,我认为我怀疑问题的答案是,用户无法直接访问您的词典(即,他们必须使用您提供的访问方法)。

但是,数组访问运算符[]呢?一个人将如何实现呢?到目前为止,我还没有看到显示如何重写[]运算符的示例

因此,如果[]在自定义类中未提供访问函数,则继承的基本方法将在其他字典上运行吗?

我尝试了以下代码段来测试我对Python继承的理解:

class myDict(dict):
    def __init__(self):
        self._dict = {}

    def add(self, id, val):
        self._dict[id] = val


md = myDict()
md.add('id', 123)
print md[id]

我收到以下错误:

KeyError:<内置函数ID>

上面的代码有什么问题?

如何更正该类,myDict以便可以编写这样的代码?

md = myDict()
md['id'] = 123

[编辑]

我已经编辑了上面的代码示例,以摆脱在离开办公桌前犯下的愚蠢错误。这是一个错字(我应该从错误消息中发现它)。


问题答案:

查看有关模拟容器类型的文档。您的情况下,第一个参数add应为self



 类似资料:
  • 问题内容: 我已经使用LESS.js之前。易于使用,类似 我看到SASS.js。如何以类似方式使用它?解析SASS文件以立即在HTML中使用。似乎SASS.js更适合与Node.js一起使用? 问题答案: 没有官方批准的sass或scss JavaScript实现。我看到了一些正在实施的实现,但是目前我不推荐使用这些实现。 但是,请注意以下几点: 当您一次可以对所有用户进行编译时,为什么要让所有用

  • 问题内容: 我有这段代码: 当我运行该代码时,出现以下错误: TypeError:无法散列的类型:’dict’ 该错误的原因是什么,我该怎么解决? 问题答案: 从错误中,我推断这是一个字典(请参阅下面的repro)。字典不能被散列,因此不能用作另一个字典的键(或本身就是这个键!)。 您可能意思是或。如果这两种解决方案都不起作用,那么在有关什么类型和是什么以及它们包含什么的更多上下文中,我们将能够为

  • 问题内容: 我有这段代码: 当我运行该代码时,出现以下错误: TypeError:无法散列的类型:’dict’ 该错误的原因是什么,我该怎么办才能解决? 问题答案: 从错误中,我推断出它是字典(请参阅下面的repro)。字典不能被散列,因此不能用作另一个字典的键(或本身就是该键!)。 您可能意思是或。如果这两种解决方案都不起作用,则可以通过更多上下文了解什么是类型以及它们包含什么,我们将能够为您提

  • 问题内容: 使用带有C ++的DB真是一团糟,当我搬到Java以便能够使用一个统一的系统来抽象整个层(又称为Hibernate)时,这令人耳目一新。 那里有几个用于数据库的C 抽象层,但是它们通常是特定于供应商的,并且只有一个包裹实际C API的薄层。是否有人遇到过类似Hibernate的C 之类的消息,或者知道正在研究此问题领域的小组或开源项目。 问题答案: 我不知道像Hibernate这样的C

  • 问题内容: 我发现访问dict键而不是更为方便,因此我编写了以下代码段: 但是,我认为一定有某些原因导致Python无法立即提供此功能。以这种方式访问​​字典键的注意事项和陷阱是什么? 问题答案: 最好的方法是: 一些优点: 它实际上有效! 没有字典类方法被遮盖(例如,.keys()工作正常) 属性和项目始终同步 尝试访问不存在的键作为属性正确引发,AttributeError而不是KeyErro

  • 问题内容: 有没有一种方法可以为嵌套的python字典定义XPath类型查询。 像这样: 我还需要选择嵌套列表;) 这可以通过@jellybean的解决方案轻松完成: [EDIT 2016]这个问题和公认的答案都是古老的。更新的答案可能比原始答案做得更好。但是,我没有测试它们,所以我不会更改已接受的答案。 问题答案: 并不完全漂亮,但是您可能会使用 当然,这不支持xpath之类的东西,例如索引……