如何从Python Non继承

2024-10-01 17:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

试过这个:

class InvalidKeyNone(None):
    pass

但这给了我:

^{pr2}$

正确的解决方案是什么,它给我一个行为与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还是因为找不到键。 但是它必须返回一个(ducktyped)None,它的行为与None完全相同。这里没有异常或自定义类型返回。在

[编辑]

好吧,所以大家的共识是:做不到。虽然不令人满意,但这是一个有效的答案。因为我真的希望默认行为在键不存在时返回一个None,所以我想在适当的时候让select eat a param切换到异常抛出。谢谢。在


Tags: none编辑数据结构类型footype方案bar
3条回答

没有办法做到这一点,至少在你做一些不可读的魔法之前是绝对不会的。在

您可能应该使用异常。在

Noneconstant,是types.NoneType的唯一值(对于v2.7,对于v3.x

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

from types import NoneType

class InvalidKeyNone(NoneType):
    pass

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

你会得到这个错误

Python 2

TypeError: Error when calling the metaclass bases type 'NoneType' is not an acceptable base type

Python 3

ImportError: cannot import name 'NoneType'

简而言之,您不能从NoneType继承

总之,为什么要让类继承NoneType?在

子类化None没有意义,因为它是一个单例,并且只能有一个。你说你想要一个具有相同行为的类,但是没有一个没有任何行为!在

如果您真正想要的是一个唯一的占位符,您可以从函数返回该占位符来指示特殊情况,那么最简单的方法是创建一个唯一的object实例:

InvalidKey = object()

result = doSomething()
if result is InvalidKey:
    ...

相关问题 更多 >

    热门问题