python如何动态创建类,type函数的使用方法python

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: