python实现动态创建类的方法分析

 更新时间:2019年06月25日 10:18:14   作者:轻舞肥羊  
这篇文章主要介绍了python实现动态创建类的方法,结合实例形式分析了Python动态创建类的原理、实现方法及相关操作技巧,需要的朋友可以参考下

本文实例讲述了python实现动态创建类的方法。分享给大家供大家参考,具体如下:

python作为动态语言,如何在运行时动态创建类呢(python Creating classes dynamically),这在编程时,有时候很有用处,动态生成类,给予相应的属性和方法。通常来说有如下两种方式:

  • 1. 根据条件,硬编码实现。
  • 2. 利用 type metaclass  来实现。

根据条件硬编码

def choose_class(name):
 if name == 'foo':
  class Foo(object):
   pass
  return Foo # 返回一个类,而不是实例
 else:
  class Bar(object):
   pass
  return Bar
MyClass = choose_class('foo') 
print MyClass # 返回一个类,而不是实例
print MyClass() # 创建一个实例

运行后,结果为:

<class '__main__.Foo'>
<__main__.Foo object at 0x00BA8370>

但其实这并不是那么动态,你还得在程序中写完整个class的定义。既然class是对象,也必定可以由什么东西创建出来。在python中,当你用 class 关键字的时候,python将自动创建这个object, 有什么方法能手动创建呢,那就是 type 方法. 这是一个很特殊的方法,能够创建一个类. type 的语法如下:

type(name of the class, 
  tuple of the parent class (for inheritance, can be empty), 
  dictionary containing attributes names and values)

按照这个语法规则,做如下例子:

def echo_msg(self):
 print self.msg
print '===dynamic create class==='+ '*'*50
MyClass = type('MyClass',(object,),{"a":123,"b":"summer","msg":"test message","echo_msg":echo_msg})
print MyClass.a
myclass = MyClass()
myclass.echo_msg()
print myclass.a,myclass.b
print '===dynamic create subclass==='+ '*'*50
MySubClass = type('MySubClass',(MyClass,),{"c":"c-value"})
print MySubClass.c,MySubClass.a,MySubClass.b
print issubclass(MySubClass, MyClass)
mysubclass = MySubClass()
mysubclass.echo_msg()

运行结果如下:

===dynamic create class===**************************************************
123
test message
123 summer
===dynamic create subclass===**************************************************
c-value 123 summer
True
test message

这个例子利用  type 创建了一个MyClass 类,然后又创建了 MySubClass 继承了MyClass 类,并绑定了属性,方法。MySubClass 也绑定自己特有的属性,同时又继承了基类的属性,方法。

这样就实现了,在python 中动态创建类,主要功臣就是 type 方法,为什么type 有这么厉害,其最终原因是:type 是 metaclass ,元类,用来创建类的类。打个比方:

Class=MetaClass()
instance=Class()

什么是 metaclass ,又将怎么利用呢,后面的文章将详细讲解 python metaclass.

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python中url标签使用知识点总结

    Python中url标签使用知识点总结

    这篇文章主要介绍了Python中url标签使用知识点以及相关实例代码,需要的朋友们参考下。
    2020-01-01
  • Pycharm中flask开启debug模式的详细流程

    Pycharm中flask开启debug模式的详细流程

    PyCharm是一个强大的集成开发环境(IDE),非常适合Python开发者,包括Flask框架,当你在使用Flask开发Web应用时,Debug功能是非常重要的,它允许你在运行时检查程序的状态、调试代码错误,本文将介绍Pycharm中flask开启debug模式的详细流程,需要的朋友可以参考下
    2024-08-08
  • Python3网络爬虫中的requests高级用法详解

    Python3网络爬虫中的requests高级用法详解

    本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。感兴趣的朋友跟随小编一起看看吧
    2019-06-06
  • Python函数调用追踪实现代码

    Python函数调用追踪实现代码

    这篇文章主要介绍了Python函数调用追踪实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 基于Django的乐观锁与悲观锁解决订单并发问题详解

    基于Django的乐观锁与悲观锁解决订单并发问题详解

    这篇文章主要介绍了基于Django的乐观锁与悲观锁解决订单并发问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python编程学习使用管道Pipe编写优化代码

    python编程学习使用管道Pipe编写优化代码

    大家好,今天这篇文章我将详细讲解 Pipe 如何让你的代码更加简洁的方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • python中pycurl库的用法实例

    python中pycurl库的用法实例

    这篇文章主要介绍了python中pycurl库的用法实例,可实现从指定网址读取网页的功能,需要的朋友可以参考下
    2014-09-09
  • Python pandas RFM模型应用实例详解

    Python pandas RFM模型应用实例详解

    这篇文章主要介绍了Python pandas RFM模型应用,结合实例形式详细分析了pandas RFM模型的概念、原理、应用及相关操作注意事项,需要的朋友可以参考下
    2019-11-11
  • Python基于jieba分词实现snownlp情感分析

    Python基于jieba分词实现snownlp情感分析

    情感分析(sentiment analysis)是2018年公布的计算机科学技术名词,它可以根据文本内容判断出所代表的含义是积极的还是负面的等。本文将通过jieba分词实现snownlp情感分析,感兴趣的可以了解一下
    2023-01-01
  • python搜索指定目录的方法

    python搜索指定目录的方法

    这篇文章主要介绍了python搜索指定目录的方法,涉及Python操作目录的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论