Python type() 函数【附简单示例

我们在Python中使用type()函数来识别特定Python对象的类型(/community/tutorials/python-classes-objects)。

Python type() 函数的语法

Python 有许多内置函数(/community/tutorials/python-tutorial)。

Python type() 函数语法是:

1type(object)
2
3type(name, bases, dict)

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

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

  • **"name"**字符串成为类名称. 它与类的 __name__属性相同
  • **"base"**字符串指定基础类。 它与类的 __base__属性相同
  • **"dict"**字典有助于创建类体。

Python 中的 type() 函数

让我们看看使用 type() 函数的一些例子。

1. 查找 Python 对象的类型

 1x = 10
 2print(type(x))
 3
 4s = 'abc'
 5print(type(s))
 6
 7from collections import OrderedDict
 8
 9od = OrderedDict()
10print(type(od))
11
12class Data:
13    pass
14
15d = Data()
16print(type(d))

输出:

1<class 'int'>
2<class 'str'>
3<class 'collections.OrderedDict'>
4<class '__main__.Data'>

请注意, type() 函数返回具有模块名称的对象的类型. 由于我们的 Python 脚本没有模块,它的模块会变成 main

2、从Python课堂中提取细节

假设我们有以下类,我们将使用类、基础、 dict 和 doc 属性提取类的元数据。

1class Data:
2    """Data Class"""
3    d_id = 10
4
5class SubData(Data):
6    """SubData Class"""
7    sd_id = 20

让我们打印一些这些类的属性。

1print(Data.__class__)
2print(Data.__bases__)
3print(Data.__dict__)
4print(Data.__doc__)
5
6print(SubData.__class__)
7print(SubData.__bases__)
8print(SubData.__dict__)
9print(SubData.__doc__)

输出:

1<class 'type'>
2(<class 'object'>,)
3{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
4Data Class
5
6<class 'type'>
7(<class '__main__.Data'>,)
8{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
9SubData Class

我们可以使用 type() 函数创建类似的类。

 1Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
 2SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
 3
 4print(Data1.__class__)
 5print(Data1.__bases__)
 6print(Data1.__dict__)
 7print(Data1.__doc__)
 8
 9print(SubData1.__class__)
10print(SubData1.__bases__)
11print(SubData1.__dict__)
12print(SubData1.__doc__)

输出:

1<class 'type'>
2(<class 'object'>,)
3{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
4Data1 Class
5
6<class 'type'>
7(<class '__main__.Data1'>,)
8{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
9SubData1 Class

请注意,我们无法使用 type() 函数创建动态类中的函数。

类型() 函数的实际使用

Python是一个动态编写的语言,所以,如果我们想知道参数的类型,我们可以使用 type() 函数,如果你想确保你的函数只在特定类型的对象上工作,请使用 isinstance() 函数。

假设我们想要创建一个函数来计算两个整数上的东西,我们可以通过以下方式实现它。

 1def calculate(x, y, op='sum'):
 2    if not(isinstance(x, int) and isinstance(y, int)):
 3        print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
 4        raise TypeError('Incompatible types of arguments, must be integers')
 5
 6    if op == 'difference':
 7        return x - y
 8    if op == 'multiply':
 9        return x * y
10    # default is sum
11    return x + y

isinstance() 函数用于验证输入参数类型. type() 函数用于在验证失败时打印参数类型。

参考

Published At
Categories with 技术
Tagged with
comments powered by Disqus