小编典典

如何从Python继承无

python

我想创建一个继承自的类None

试过这个:

class InvalidKeyNone(None):
    pass

但这给了我:

TypeError: Error when calling the metaclass bases
    cannot create 'NoneType' instances

什么能给我一个类型完全一样None但可以测试的类型的正确解决方案呢?

foo = InvalidKeyNone()
print(type(foo))
>>> InvalidKeyNone

[编辑]

我想这样做是因为我正在针对Python数据结构创建选择方案:

bar = select(".foo.bar.[1].x", {"foo":{"bar":[{"x":1}, {"x":2}], "baz":3})
print(bar)
>> 2

而且我希望能够确定是否由于选择的值为“无”或因为找不到键而得到“无”。但是,它必须返回行为完全像None的(鸭型)None。没有异常或自定义类型返回此处。

[编辑]

好的,共识是:无法完成。尽管不尽人意是一个有效的答案。由于我真的希望默认行为在不存在键时将其返回None,所以我认为我将在适当的时候让select
eat参数转换为异常抛出。谢谢。


阅读 224

收藏
2021-01-16

共1个答案

小编典典

None是一个常量,唯一的值types.NoneType(对于v2.7,对于v3.x

无论如何,当您尝试从 types.NoneType

from types import NoneType

class InvalidKeyNone(NoneType):
    pass

foo = InvalidKeyNone()
print(type(foo))

你会得到这个错误

Python 2

TypeError:调用元类基本类型“ NoneType”时出错,这是不可接受的基本类型

Python 3

ImportError:无法导入名称“ NoneType”

简而言之,您不能继承 NoneType

无论如何,为什么要一个类继承NoneType

2021-01-16