python如何动态创建类,type函数的使用方法python
之前学过使用type()函数可以检查变量的类型,但是如果我想用type()直接检查一个类的类型呢?请看下面的过程:
classRole:
及格
r=角色()
#检查变量r的类型
print(type(r))#class__main__。角色
#检查角色类本身的类型
Print(type(Role))#classtype 运行上面的程序,可以看到下面的输出结果:
类“__main__”。角色
Classtype 从上面的输出结果可以看出,角色类本身的类型就是type。这句话有点别扭。如何理解角色类的类型是type?
从Python解释器的角度来看,当一个程序使用class定义角色类时,也可以理解为定义一个特殊的对象(class类型的对象)并将该对象赋给角色变量。因此,程序使用class定义的所有类都是class类型的实例。
其实Python完全允许使用type()函数(相当于type类的构造函数)来创建type对象,而且由于type类的实例就是类,所以Python可以使用type()函数来动态创建类。例如,下面的程序:
deffn(self):
打印(“fn功能”)
#使用类型()定义Dog类
Dog=type(Dog ,(object,),dict(walk=fn,age=6))
#创建一个狗对象
d=狗()
#分别检查D和Dog的类型
打印(类型(d))
打印(字体(狗))
散步()
Print(Dog.age)上面第四行代码使用type()定义了一个Dog类。使用type()定义类时,可以指定三个参数:
参数一:创建的类名。
参数2:该类继承的父类集合。因为Python支持多重继承,所以这里使用元组来指定它的多个父类。即使实际上只有一个父类,也需要使用元组语法(必须有多余的逗号)。
参数dictionary对象是这个类绑定的类变量和方法。字典的关键字是类变量或方法名,如果字典的值是普通值,则表示类变量;如果字典的值是一个函数,它代表一个方法。
因此,第四行代码定义了一个Dog类,它继承了object类,还为该类定义了一个walk()方法和一个age类变量。
运行上述程序,您将看到以下输出结果:
类“__main__”。“狗”
类别“类型”
Fn函数
6从上面的输出结果可以看出,type()函数定义的类和直接由类定义好的类没有区别。实际上,Python解释器在执行class定义的类时,仍然使用type()函数来创建类。因此,无论用哪种方式定义类,程序最终都会创建一个类型的实例。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。