Python type() 函数

Python type() 语法

type() 是 Python 的一个内置函数,它根据语法的不同,有以下 2 个不同的功能。

  • 获取对象的类型(最常用):当传入 1 个参数时,type() 返回该对象的类型(类)。
  • 创建一个新的类型:当传入 3 个参数时,type() 可以动态地创建一个新的类对象。

语法:

# 方式 1:获取对象类型
type(object)

# 方式 2:创建新类型
type(name, bases, dict)

说明:

在方式 1 中,参数 object 代表的是一个对象。type() 函数会返回 object 对应的类型名。

在方式 2 中,type() 函数接收以下 3 个参数。

  • name(必选):是一个字符串,表示新类的名称,它会成为 __name__ 属性。
  • bases(可选,默认值:(object,)):是一个元组,表示新类的父类(基类),它会成为 __bases__ 属性。如果没有基类,则使用空元组 ()。
  • dict(可选):是一个字典,表示新类的属性和方法,它会成为 __dict__ 属性。

提示:

  • Python 一切皆对象,因此像数字、字符串、列表等本质上也是对象。
  • type() 函数是所有 Python 类的元类(metaclass)。也就是说,所有类都是 type 的实例。
  • 我们可以使用 type() 或 isinstance() 来检查对象的类型。isinstance() 更推荐用于检查继承关系。

Python type() 摘要

使用频率
官方文档 查看
相关函数 isinstance()issubclass()

Python type() 示例

接下来,我们通过几个简单的例子来讲解一下 Python type() 函数是如何使用的。

示例 1:type() 带 1 个参数

print(type(666))          # <class 'int'>
print(type(3.14))         # <class 'float'>
print(type('绿叶网'))      # <class 'str'>
print(type([1,2,3]))      # <class 'list'>
print(type((1,2,3)))      # <class 'tuple'>
print(type({'a':1}))      # <class 'dict'>
print(type({1,2}))        # <class 'set'>
print(type(True))         # <class 'bool'>
print(type(None))         # <class 'NoneType'>

运行结果如下。

<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
<class 'bool'>
<class 'NoneType'>

示例 2:type() 判断自定义对象

class Hero:
    name = '剑圣'
h = Hero()
print(type(h))

运行结果如下。

<class '__main__.Hero'>

示例 3:type() 带 3 个参数

Hero = type('Hero', (object,), dict(name='剑圣'))
h = Hero()
print(type(h))
print(h.name)

运行结果如下。

<class '__main__.Hero'>
剑圣

分析:

下面两种方式是等价的,都可以用于定义一个名为 Hero 的类。

# 方式 1
class Hero:
    name = '剑圣'

# 方式 2
Hero = type('Hero', (object,), dict(name='剑圣'))

提示: 对于初学者而言,type(name, bases, dict) 这种语法比较少会用到,简单了解即可。不过 type() 函数可以动态创建类,这在一些高级编程技巧中非常有用。

type() 应用场景

在 Python 中,我们可以使用 type() 函数结合 is 关键字来判断对象是否为某种类型。

示例 4:type() 判断基本类型

result1 = type(666) is int
print(result1)

result2 = type(666) is str
print(result2)

运行结果如下。

True
False

示例 5:type() 判断自定义对象

class Hero:
    name = '剑圣'
h = Hero()
print(type(h) is Hero)

运行结果如下。

True

type() 高级用法

在 Python 中,type() 函数 不仅可以用于获取对象的类型,还可以动态创建类。通过  type() 函数,我们可以定义一个类的名称、基类(父类)以及类的属性和方法。

示例 6:type() 动态创建包含方法的类

# 定义类方法
def attack(self):
    return f'{self.name}发动攻击!'

# 使用 type() 动态创建类
Warrior = type('Warrior', (), {
    'name': '蛮王',
    'attack': attack
})

# 创建实例并调用方法
w = Warrior()
print(w.attack())

运行结果如下。

蛮王发动攻击!

type() 与 isinstance() 的区别

type() 和 isinstance() 这两个函数的功能比较相似,但它们存在本质上的区别。

  • type():不考虑继承关系,它不会认为子类是一种父类类型。
  • isinstance():考虑继承关系,它会认为子类是一种父类类型。

在实际开发中,如果想要判断两种类型是否相同,更推荐使用 isinstance() 函数。

示例 7:type() vs isinstance()

class Person: 
    pass
class Student(Person): 
    pass

s = Student()

print(type(s) is Person)          # False(严格类型匹配)
print(isinstance(s, Person))      # True(识别继承关系)

运行结果如下。

False
True

上一篇: object()

下一篇: isinstance()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号