Python的有关模块的PEP 435指出,应与枚举器进行比较,而不是通常的。我想这是因为枚举成员是静态的,并且永远不会改变,所以这是有道理的。enum
is
==
出于兼容性原因,我正在使用Python 2.7.9,并且我不想在项目中引入太多新库,因此我不打算使用该enum
模块的Python 2.7.9端口。因此,我改为使用一种更简单的枚举形式:
class Color(object):
red = 1
green = 2
blue = 3
在这种情况下,is
进行比较还可以吗?更笼统地说,可以将在程序生存期内不会发生变化的静态类变量与is
而不是进行比较==
,而不管它们的类型如何?
注意:我认为仅静态变量的名称将用于赋值/比较,而不是其值。
你能?是的-在CPython中可以插入小整数,因此无论x = 2
从何处获取,x is Color.green
都将求值True
。
你应该?没有。一方面,它没有任何概念的意义-你真的不在乎,如果他们是完全相同的对象(身份证,is
),或者他们只是是否具有相同的值(平等,==
)?如果值源自类本身以外的其他地方,例如数据库或用户输入,该怎么办?另外,小整数的intern是实现细节,因此不应依赖。
更笼统地说,可以将在程序生存期内不会发生变化的静态类变量与
is
而不是进行比较==
,而不管它们的类型如何?
不,因为无论它们是否为“静态”,这都可能失败:
>>> class Demo(object):
class_attr = "some string"
>>> "some string" is Demo.class_attr
False
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句