我对Python的OOP方面不太熟悉,所以这有点超出我的想象。
>>> a=[[2,3,4]]
>>> types = (list,str,int,str,int)
>>> b=isinstance(a,types)
True
无论我在列表类型后添加什么类型,表达式总是返回True
。
我已经读过isinstance()
方法接受派生类类型,但我无法说服自己,我知道这里发生了什么。
这也返回true。是因为所有3个属于同一个班级吗?
>>> isinstance([], (tuple, list, set))
True
答案 0 :(得分:4)
In [1]: isinstance?
文档字符串:
isinstance(object, class-or-type-or-tuple) -> bool
返回对象是类的实例还是其子类的实例。 使用类型作为第二个参数,返回是否为对象的类型。 使用元组
isinstance(x, (A, B, ...))
的表单是以下的快捷方式:isinstance(x, A) or isinstance(x, B) or ... (etc.).
输入:
builtin_function_or_method
所以,它实际上是一个or
语句。很清楚,对吧?
答案 1 :(得分:1)
那是因为当你给一个类型元组作为isinstance的第二个参数它作为'OR'(或任何)时,如果第一个参数的类型是该元组中的任何类型,它将返回True。
示例 -
>>> isinstance('asd',(str,bool,int))
True
答案 2 :(得分:1)
虽然列表class WebElementDecorator
在Python中被视为 Iterator ,但就像元组,字典和集合一样,它不是从同一个基类派生的(除非你考虑{{1} }作为基本类型,几乎适用于所有类型。)
试试这个:
[]
像其他人一样回答,给object
一个元组就像这样说:
>>> [].__class__
<type 'list'>
>>> ().__class__
<type 'tuple'>
>>> {}.__class__
<type 'dictionary'>
>>> [].__class__.__bases__
<type 'object'> # yeah sure
isinstance()
和>>> type([]) in (tuple, list, set)
True
之类的类不是从同一个基类派生的子类,它们只是通过提供tuple
和{{1}来符合list
的协议}} 方法。这是鸭子打字的美妙。