Python相当于Ruby'is_a?'

时间:2013-12-05 17:25:41

标签: python ruby

我想知道是否有一个Python相当于Ruby' is_a?'方法

> "".is_a? String
=> true

Info:

is_a?(class) → true or false
  

如果class是obj的类,或者class是其中之一,则返回true   obj中包含的obj或模块的超类。

谢谢。

3 个答案:

答案 0 :(得分:5)

这取决于你想要的确切部分。

如果您想知道fooC类的实例还是其任何祖先,那么:

isinstance(foo, C)

如果您想知道fooC的实例还是C,那么:

type(foo) == C

从广义上讲,经常使用像isinstance(...)type(...)之类的东西是代码气味,因为它意味着鸭子打字被打破,而Python在很大程度上依赖于那种合同。例如,参见 isinstance considered harmful

答案 1 :(得分:4)

我从未使用过Ruby,但该功能与isinstance的功能非常相似:

>>> a = "string"
>>> isinstance(a, str)
True
>>>

此外,如果您不知道,这里有str的参考。

答案 2 :(得分:2)

有一个isinstance(a,b)函数可以检查a是否属于b类型。