Python的type()函数【带有简单示例】
我们在Python中使用type()函数来识别特定Python对象的类型。这个函数非常简单直接,容易理解。言归正传,让我们直接进入语法部分。
Python的type()函数的语法
Python有许多内置函数。type()函数用于获取对象的类型。
Python的type()函数语法是:
type(object)
type(name, bases, dict)
当将单个参数传递给type()函数时,它将返回对象的类型。它的值与object.__class__实例变量相同。
当传入三个参数时,它返回一个新的类型对象。它用于动态地即时创建一个类。
- “name” string becomes the class name. It’s the same as the __name__ attribute of a class.
- “bases” tuple specifies the base classes. It’s the same as the __bases__ attribute of the class.
- “dict” dictionary helps create the class body. It’s the same as the __dict__ attribute of the class.
Python中type()函数的例子
让我们来看一些使用type()函数的示例。
1. 寻找一个Python对象的类型
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
输出:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
请注意,type()函数返回带有模块名称的对象类型。由于我们的Python脚本没有模块,它的模块变成了__main__。
从Python类中提取细节
假设我们有以下类。我们将使用类、基类、字典和文档属性来提取关于这些类的元数据。
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
我们来打印一些这些类的属性。
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
输出:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
我们可以使用type()函数创建类似的类。
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
输出:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
请注意,我们无法使用type()函数在动态类中创建函数。
type() 函数的在现实生活中的应用
Python是一种动态类型语言。因此,如果我们想要了解参数的类型,我们可以使用type()函数。如果您想确保您的函数仅适用于特定类型的对象,请使用isinstance()函数。
假设我们想要创建一个用来计算两个整数的函数,我们可以按照以下方式实现它。
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# default is sum
return x + y
isinstance() 函数是用于验证输入参数的类型。当验证失败时,type() 函数用于打印参数的类型。
参考文献
- type() API Doc
- Python isinstance() function
- Python Type Checking