关于python:在不生成pylint警告的情况下,如何比较两个变量的类型?

How do I compare the type of two variables without generating PyLint warnings?

假设我有两个变量:

1
2
a = 123
b = 234

我想比较一下他们的类型。显而易见的是:

1
type(a) == type(b)

但是,皮林特给了我一个警告,如果可能的话,我想避免:

1
Using type() instead of isinstance() for a typecheck. (unidiomatic-typecheck)

(我相信这并不是特别警告我的使用。)

在比较两种变量类型的情况下,我相信不能使用isinstance。

在不生成pylint警告的情况下,如何比较两个变量的类型?


人们太沉迷于过梁。它就像是《Pep8时尚指南》。它们是指导方针,你必须运用自己的判断。

如果你需要知道某物的类型是否与其他某物的类型相同,那么绝对直接

1
type(a) == type(b)

是最毒气的方式。如果你能避免的话,跳过疯狂的圈来做一些简单的事情并不是惯用的Python。

尽管如此,在Python中,通常不需要知道这两种类型是否完全相同。(参见Brenbarn和Chad S.的评论),因此,与比较这两种类型的一行代码相比,过梁可能指向更大的"代码气味"。


如果您必须进行比较,如果两种类型完全相同,并且由于某种原因不能使用type(),则最后一种方法可能是:

1
a.__class__ is b.__class__

还要注意这种检查对旧样式类的限制。


只需关闭皮林警告。

只需一句话,你就可以做到:

1
types_match = type(a) == type(b) # pylint: disable=unidiomatic-typecheck

请参阅https://pylint.readthedocs.io/en/latest/user_guide/message-control.html