从零开始学python | Python中的isinstance是什么以及如何实现它?

Python是当今市场上功能最强大的编程语言之一。Python还支持在其生态系统中实现其他编程语言,例如Java,C和C ++。在Python生态系统中可用的许多模块和功能中,与众不同的一个就是Python中的isinstance。因此,在本文中,我们将详细介绍该实例,其用途以及它带来的功能。

本文将介绍以下指针,

让我们开始!

Python中的Isinstance是什么?

Python isinstance用于检查作为参数的第一个对象是否是作为第二个参数的classinfo类的实例或子类。 

Python中isinstance的语法如下。 

isinstance(object, classinfo)

让我们看看Python中的Isinstance具有哪些参数和返回值,

实例的参数和返回值

范围

既然您已经知道isinstance的语法,那么让我们仔细看看它所考虑的参数。 

  1. 对象:这是需要检查的对象。 
  2. Classinfo:这是需要检查对象的类,信息或类的元组。 

返回值

在程序中使用isinstance时,返回值取决于许多条件,如以下指针中所述。 

  1. 如果对象是classinfo的子类或类的元组,则返回True。 
  2. 如果对象不是classinfo或类的元组的子类,则返回False。 

如果在特定情况下classinfo不是类型或类型的元组,则将typeerror异常引发到用户的屏幕上。 

例子 

为了更好地理解isinstance的用法,让我们看一些示例。 

范例#1

class Foo:
  a = 5
fooInstance = Foo()
print(isinstance(fooInstance, Foo))
print(isinstance(fooInstance, (list, tuple)))
print(isinstance(fooInstance, (list, tuple, Foo)))

输出

true

flase

true

Python中的Isinstance:示例#2

numbers = [1, 2, 3]
result = isinstance(numbers, list)
print(numbers,'instance of list?', result)
result = isinstance(numbers, dict)
print(numbers,'instance of dict?', result)
result = isinstance(numbers, (dict, list))
print(numbers,'instance of dict or list?', result)
number = 5
result = isinstance(number, list)
print(number,'instance of list?', result)
result = isinstance(number, int)
print(number,'instance of int?', result)

输出

[1,2,3]列表的实例?真的

[1,2,3] dict的实例?错误的

[1,2,3]字典或列表的实例?真的

清单的5个实例?错误的

5个int实例?真的

例子#3

# Python code for isinstance()
class Test:
a = 5
TestInstance = Test()
print(isinstance(TestInstance, Test))
print(isinstance(TestInstance, (list, tuple)))
print(isinstance(TestInstance, (list, tuple, Test))) 

输出

true

false

true

让我们继续阅读“ Python中的实例”一文,并了解Type方法的用法,

在Python中使用Type

与isinstance相似,Python中还有另一个内置方法,用于检查运行时正在使用的类型pf变量。如果通过类型方法传递单个参数或对象,则它将返回运行时正在使用的对象的类型。 

为了更好地理解这一点,请看下面的示例。 

Python中的Isinstance:示例#1.1

# Python code type() with a single object parameter
x = 5
s = "sampleoutput"
y = [1,2,3]
print(type(x))
print(type(s))
print(type(y)) 

输出 

类'int'

'str'类

类“列表”

Example#1.2

# Python code for type() with a name,
# bases and dict parameter
o1 = type('X', (object,), dict(a='Foo', b=12))
print(type(o1))
print(vars(o1))
class test:
a = 'Foo'
b = 12
o2 = type('Y', (test,), dict(a='Foo', b=12))
print(type(o2))
print(vars(o2)) 

输出

{'b':12,'a':'Foo','__dict__':,'__doc__':无,'__weakref__':}

{'b':12,'a':'Foo','__ doc__':无}

让我们比较一下Python中的Type和Isinstance,

Type()和Isinstance之间的区别

Python中的type和isinstance提供两个非常不同的功能。看一下下面的指针,可以更好地理解它们之间的区别。 

  1. 如果需要检查对象是否具有某种类型,则最好使用isinstance。这是因为isinstance将能够检查在第一个参数中传递的对象是否与在第二个参数中传递的对象具有相同的类型。 
  2. 另一方面,当您只需要检查特定对象的类型而不将其与另一个对象进行比较时,使用type更为可取。 

例子 

#Python code to illustrate duck typing
class User(object):
def __init__(self, firstname):
self.firstname = firstname
@property
def name(self):
return self.firstname
class Animal(object):
pass
class Fox(Animal):
name = "Fox"
class Bear(Animal):
name = "Bear"
# Use the .name attribute (or property) regardless of the type
for a in [User("SampleOutput"), Fox(), Bear()]:
print(a.name)

输出 

SampleOutput 

Fox

Bear

不使用类型方法的另一个原因是缺乏继承。请看下面共享的示例,以更好地理解这一点。 

#python code to illustrate the lack of
#support for inheritance in type()
class MyDict(dict):
"""A normal dict, that is always created with an "initial" key"""
def __init__(self):
self["initial"] = "some data"
d = MyDict()
print(type(d) == dict)
print(type(d) == MyDict)
d = dict()
print(type(d) == dict)
print(type(d) == MyDict)

输出 

flase

ture

ture

flase

各位,这使我们到了本文的结尾。希望您了解Python中的Isinstance及其作用。

(完)