为什么n
对象与完全相同None
?
C实现保留一个单例实例。
NoneType.__new__返回单例实例。
为什么设计语言时要使n与Object完全相同None
?
如果没有单例实例,则
x is None由于
is操作员基于身份,因此您不能依赖检查。尽管
None ==None也是如此
True,但实际上可能
x ==None是
True在何时。有关示例,请参见此答案。
x``None
一个人怎么会在python中实现这种行为呢?
您可以通过重写实现此模式
__new__。这是一个基本示例:
class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if Singleton._instance is None: Singleton._instance = object.__new__(cls, *args, **kwargs) return Singleton._instanceif __name__ == '__main__': s1 = Singleton() s2 = Singleton() print 's1 is s2:', s1 is s2 print 'id(s1):', id(s1) print 'id(s2):', id(s2)
输出:
s1是s2:真实
ID(s1):4506243152
id(s2):4506243152
当然,这个简单的示例不会使创建第二个实例成为 不可能 。



