Python 相当于 Ruby 'is_a?'

问题描述 投票:0回答:3

我想知道 Python 是否有相当于 Ruby 的“is_a”?方法?

> "".is_a? String
=> true

信息:

is_a?(class) → true or false

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

谢谢你。

python ruby
3个回答
7
投票

这取决于您想要什么部分。

如果您想知道

foo
是否是类
C
其任何子类的实例,那么:

isinstance(foo, C)

如果你想知道

foo
是否是
C
的实例并且只是
C
,那么:

type(foo) == C

从广义上讲,频繁使用像

isinstance(...)
type(...)
这样的东西是一种代码味道,因为这意味着鸭子类型被破坏了,而 Python 严重依赖于这种契约。请参阅,例如,被认为是有害的


4
投票

我从未使用过 Ruby,但该功能看起来很像

isinstance
的功能:

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

另外,如果你不知道,这里有一个关于

str
的参考。


2
投票

有一个

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

© www.soinside.com 2019 - 2024. All rights reserved.