Python type() 函数 [附带简单示例]

我们在Python中使用type()函数来识别特定的Python对象的类型。这是一个非常直观且易于理解的函数。话不多说,让我们直接进入语法。

Python type()函数的语法

Python有许多内置函数type()函数用于获取对象的类型。

Python type()函数的语法是:

type(object)

type(name, bases, dict)

当将单个参数传递给type()函数时,它返回对象的类型。其值与object.__class__实例变量相同。

当传递三个参数时,它返回一个新的类型对象。它用于动态地在运行时创建一个类。

  • “name”字符串成为类名。与类的__name__属性相同。
  • “bases”元组指定基类。与类的__bases__属性相同。
  • “dict”字典帮助创建类的主体。与类的__dict__属性相同。

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__。

2. 从Python类中提取详细信息

假设我们有以下类。我们将使用class、bases、dict和doc属性提取关于这些类的元数据。

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
    # 默认是求和
    return x + y

使用isinstance()函数来验证输入参数的类型。当验证失败时,type()函数用于打印参数的类型。

参考

Source:
https://www.digitalocean.com/community/tutorials/python-type