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

为什么我不能从Python中的dict AND Exception继承?

邓阳伯
2023-03-14
问题内容

我有以下课程:

class ConstraintFailureSet(dict, Exception) :
    """
        Container for constraint failures. It act as a constraint failure itself
        but can contain other constraint failures that can be accessed with a dict syntax.
    """

    def __init__(self, **failures) :
        dict.__init__(self, failures)
        Exception.__init__(self)

print isinstance(ConstraintFailureSet(), Exception)
True
raise ConstraintFailureSet()
TypeError: exceptions must be classes, instances, or strings (deprecated), not ConstraintFailureSet

有没有搞错 ?

最糟糕的是我无法尝试super(),因为Exception是基于旧类的…

编辑:而且,是的,我试图切换继承/初始化的顺序。

EDIT2:我在Ubuntu8.10上使用CPython
2.4。您最近才知道这种信息很有用;-)。无论如何,这个小谜语已经让我的三个同事闭上了嘴。你会成为我今天最好的朋友…


问题答案:

两者Exceptiondict都在C中实现。

我认为您可以按照以下方式进行测试:

>>> class C(object): pass
...
>>> '__module__' in C.__dict__
True
>>> '__module__' in dict.__dict__
False
>>> '__module__' in Exception.__dict__
False

由于Exception并且dict对如何在内部存储它们的数据有不同的想法,因此它们不兼容,因此您不能同时从两者继承。

在更高版本的Python中,尝试定义类时应获得Exception:

>>> class foo(dict, Exception):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
    multiple bases have instance lay-out conflict


 类似资料:
  • 问题内容: 为什么以下代码不起作用(Python 2.5.2)? 我想创建一个类似的类,但具有不同的功能。显然我的函数永远不会被调用。而是调用原始文件并失败,因为它需要3个参数,而我传入了一个。 这里发生了什么?这是一个线索吗? 谢谢! 问题答案: 关于其他几个答案,这与用C本身实现的日期无关。该方法不做任何事情,因为它们是 不可变的 对象,因此构造函数()应该完成所有工作。您会看到相同的行为将i

  • 因此,我正在Ubuntu 14.04机器上将所有工具从python2迁移到python3.4。到目前为止,我已经完成了以下工作: 仅针对我的用户,在我的zshrc中将python别名为python3 在系统本身上安装了pip3(但无论如何我都会使用VirtualNVS,所以我不会真正使用它) 将我的VirtualNVRapper“make”别名更改为('workon'在下面被调用为'v') 奇怪的

  • 本文向大家介绍Python中的pathlib.Path为什么不继承str详解,包括了Python中的pathlib.Path为什么不继承str详解的使用技巧和注意事项,需要的朋友参考一下 起步 既然所有路径都可以表示为字符串,为什么 pathlib.Path 不继承 str ? 这个想法的提出在 https://mail.python.org/pipermail//python-ideas/201

  • 为了便于DRY,我希望在父类中定义ContextConfiguration并让所有测试类继承它,如下所示: 父类: 子类: 根据ContextConfiguration文档,我应该能够继承父级的位置,但我不能让它工作。Spring仍然在默认位置()中查找文件,如果找不到,则会查找barfs。我尝试了以下方法,但没有成功: 使父类具体化 向父类添加无操作测试 同时向父类添加注入成员 以上组合 我使用

  • 我需要一些帮助,情况是我能够返回新的CSV文件,但无法将绘图图返回到另一个页面,并且我在不同的场景下分离了。有人能指出我应该对代码做什么吗?或者给我一些提示,提前谢谢! 应用程序。派克

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严