Python实用程序案例——动态创建类
2015-01-16 18:10
375 查看
编程思想
Python中一切都是对象,使用对象的概念,不但可以使代码更具有可读性,还可以通过配置化的方式动态生成代码。将类似的功能使用一次代码实现,降低代码冗余度。利用Python自带的getattr()、setattr()函数可以动态获取和设置一个对象的属性。
开发环境
操作系统:WIN7Python版本:Python 3.4.1
程序实例
程序原型
原型一:动态创建一个类,并为其设置一个已有的类。输入参数:module_name, class_name为string类型。
使用方法:o=create_object_class('example', 'class1')
def create_object_class(module_name, class_name): class o: pass module_meta = __import__(module_name) class_meta = getattr(module_meta, class_name) o = class_meta() return o
原型二:动态创建一个类,并定义其属性。
输入参数:object_attribute为dict类型。
使用方法:o=create_object_attribute({"studio": "demonstudio", "office_room": "501"})
def create_object_attribute(object_attribute): class o: pass for key in object_attribute: setattr(o, key, object_attribute[key]) return o
案例实现
程序主体:输入一个对象的属性字典,其中字典key为#class时的值代表使用的类,若某属性为字典,则继续为其递归生成子对象。#author: D.Lucifer def create_object(object_attribute): class o: pass if '#class' in object_attribute.keys(): (module_name, class_name) = object_attribute['#class'].rsplit('.', 1) module_meta = __import__(module_name) class_meta = getattr(module_meta, class_name) o = class_meta() for k in object_attribute: if str(type(object_attribute[k])) == '<class \'dict\'>': setattr(o, k, create_object(object_attribute[k])) else: setattr(o, k, object_attribute[k]) return o
测试样本:定义2个类,class1为输出对象的studio的值,class2为输出对象的room的值,self.studio和self.room将在测试脚本中定义。
class class1: def __init__(self): pass def print1(self): print('studio_name:' + str(self.studio)) class class2: def __init__(self): pass def print2(self): print('room:' + str(self.room))
测试脚本:该字典定义了一个对象,'#class'代表该对象将使用example.class1的类,该对象拥有studio的属性,该对象的office是另一个对象,使用example.class2的类,拥有floor和room的属性。
def test(): dict_object = {"#class": "example.class1", "studio": "demonstudio", "office": {"#class": "example.class2", "floor": 5, "room": "501" } } o = create_object(dict_object) o.print1() o.office.print2() print(o.studio) print(o.office.floor) test()
执行结果:
>>> studio_name:demonstudio room:501 demonstudio 5 >>>
相关文章推荐
- ABAP--动态创建类型和变量的使用程序样例
- C#中动态创建控件及事件处理程序
- ABAP--动态创建类型和变量的使用程序样例
- 如何解决Qt 4GUI程序中动态创建内存的泄露问题
- VB.NET如何在程序中动态创建EXECL文件
- Python中动态创建类实例
- ABAP--动态创建类型和变量的使用程序样例
- C#中动态创建控件及事件处理程序、置于顶层
- XamlReader.Load Silverlight 程序动态创建添加UI元素
- VB程序中用ADO对象动态创建数据库和表
- 应用Java程序动态创建ODBC数据源的实例
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- ABAP--动态创建类型和变量的使用程序样例
- C#中动态创建控件及事件处理程序
- 在VB程序中用ADO对象动态创建数据库和表
- 收集的一些python程序,实用并且有趣
- [转贴][Python]收集的一些python程序,实用并且有趣
- C#中动态创建控件及事件处理程序
- VB程序中用ADO对象动态创建数据库和表
- 动态创建程序集中的类