知行编程网知行编程网  2023-01-03 20:00 知行编程网 隐藏边栏  11 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python type函数:动态创建类的相关知识,包括sql创建函数,以及python 创建类这些编程知识,希望对大家有参考作用。

Python类型函数:动态创建类

之前学过用type()函数查看一个变量的类型,但是如果我想用type()直接查看一个类的类型怎么办?请参阅以下程序:

class Role:
    pass
r = Role()
# 查看变量r的类型
print(type(r)) # <class '__main__.Role'>
# 查看Role类本身的类型
print(type(Role)) # <class 'type'>

运行上面程序,可以看到如下输出结果:

<class '__main__.Role'>
<class 'type'>

从上面的输出可以看出,Role类本身的类型是type。这句话有点啰嗦,怎么理解Role类的类型是type呢?

从Python解释器的角度来看,当程序使用class来定义Role类时,也可以理解为定义一个特殊的对象(类型类的对象),并将该对象赋值给Role变量。因此,程序使用类定义的所有类都是类类型的实例。

事实上,Python完全允许使用type()函数(相当于类型类的构造函数)来创建类型对象,而由于类型类的实例是一个类,Python可以使用type()函数动态创建类。例如,下面的程序:

def fn(self):
    print('fn函数')
# 使用type()定义Dog类
Dog = type('Dog', (object,), dict(walk=fn, age=6))
# 创建Dog对象
d = Dog()
# 分别查看d、Dog的类型
print(type(d))
print(type(Dog))
d.walk()
print(Dog.age)

上面的第 4 行使用 type() 定义了一个 Dog 类。使用 type() 定义类时可以指定三个参数:

参数一:创建的类名。

参数2:该类继承的父类集合。由于Python支持多重继承,所以这里用一个元组来指定它的多个父类。即使实际上只有一个父类,也需要元组语法(必须有一个额外的逗号)。

参数3:字典对象是该类绑定的类变量和方法。字典的键是类变量或方法名。如果字典的值是普通值,则代表类变量;如果字典的值是一个函数,它代表一个方法。

可以看出,第四行代码定义了一个Dog类,它继承了object类,还为这个类定义了一个walk()方法和一个age类变量。

运行上面程序,将看到如下输出结果:

<class '__main__.Dog'>
<class 'type'>
fn函数
6

从上面的输出可以看出,使用type()函数定义的类和直接使用class定义的类没有区别。事实上,当 Python 解释器执行使用 class 定义的类时,它仍然使用 type() 函数来创建类。因此,无论以何种方式定义类,程序最终都会创建一个类型的实例。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享