`
marlonyao
  • 浏览: 248863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

创建简单声明式python对象模型

阅读更多
创建简单python声明式对象模型

要创建一个简单的Author对象,不考虑数据库操作,通常我都会这么写:
class Author(object):
    """simple model represents Author"""
    def __init__(self, id=None, name=None, address=None, summary=None):
        self.id = id
        self.name = name    
        self.address = address
        self.summary = summary

很简单,但有些重复,我能不能只写id, name等等一次呢?可以这样写:
class Author(object):
    """simple declaretive model for Author"""
    id = None
    name = None
    address = None
    summary = None

这和上面的代码不一样,你不能像第一例子那样可以通过传关键字参数来构造Author对象。为了解决这个问题,我们可以定义一个父类Model,然后让Author继承它。
class Model(object):
    def __init__(self, **kwargs):
        for name, value in kwargs.items():
            setattr(self, name, value)

class Author(Model):
    """simple declaretive model for Author"""
    id = None
    name = None
    address = None
    summary = None

这样就大功告成了,再定义另外一个模型就简单多了,但是它还是和第一个版本略有不同。
author = Author(name='marlon')
print author.name
print author.address

对两种模型实现它都会输出marlon和None,但是访问adress属性两者有所不同。第一种实现它访问的author对象的adress属性(通过author.__dict__可以证实这一点),而声明式模型它实际返回的时Author类的address属性,这意味着如果我修改了Author.address,author.address也会改变,这当然不是期望的行为,但是有什么理由去修改它呢?

(完)
分享到:
评论

相关推荐

    Python核心编程第二版

     6.20 *拷贝Python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    pycfmodel:用于Cloud Formation脚本的python模型

    pycfmodel通过创建由python对象组成的模型,使在Python中使用CloudFormation脚本更加容易。 对象具有各种帮助程序功能,可帮助执行与解析和检查CloudFormation脚本有关的常见任务。 pip install pycfmodel 目前支持...

    Python核心编程第二版(ok)

     6.20 拷贝Python对象.c浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     6.20 *拷贝python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     6.20 *拷贝python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    2019年python自动化运维进阶篇20期视频教程-百度网盘下载视频

    2019年python自动化运维进阶篇20期视频教程,百度网盘下载视频。 课程目录: ├─01第一天 │ 01.drf vue分享.mp4 │ 02.课程简单介绍.mp4 │ 03 helloworld.mp4 │ 04 httpRequest对象与httpResponse对象.mp4 │ ...

    remodel:Remodel是一种工具,可通过生成支持编码,值比较和不变性的Objective-C模型来帮助iOS和OS X开发人员避免重复代码

    一个Objective-C代码生成工具,专门用于快速创建和编辑模型对象 Remodel是一种工具,可通过生成支持编码,值比较和不变性的Objective-C模型来帮助iOS和OS X开发人员避免重复代码。 有关Remodel的更多信息,请参见...

    类似于Django的数据分析

    models.py: 提供可操作的数据库ORM对象和定义数据模型 decorators.py: 提供装饰器, 例如: 要求用户必须登录的视图装饰器 utils.py: 提供一些自定义函数 /conf/: 项目的配置文件夹 __init__.py: 声明这个文件夹是一个...

    python-ngoschema:定义带有json模式,对象管理和代码生成的类

    用户可以添加方法并覆盖设置器/获取器,但是该库提供了一个自动创建类的模板,该类具有良好的检测功能(包括记录器,异常处理,类型检查,数据验证,序列化等)。 使用classbuilder可以轻松地基于规范名称和名称...

    遗传算法图像分matlab代码-fullstack-data-science-old:全栈数据科学

    -()-用于Python的声明性统计可视化库 -- -从pandas DataFrame对象创建HTML分析报告 结帐的 -ML-Ensemble –高性能整体学习 -具有scipy.optimize接口的基于模型的顺序优化 机器学习图书馆 -Lime:解释任何机器学习...

    3D-declaracad.zip

    3D-declaracad.zip,使用open cascade(pythonocc)和enaml(python)构建的声明性参数化三维建模应用程序,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,...

    GraduationProject-2021:2021年毕业设计(计算机科学与技术专业)

    2021年毕业设计(计算机科学与技术专业)...:项目的配置文件夹__init__.py :声明这个文件夹是一个python软件包app.py :提供创建Flask App对象的函数config.py :将Flask需要的配置打包成一个类settings.py :提供

    疯狂JAVA讲义

    学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象? 141 5.5.2 构造器的重载 142 学生提问:为什么要用this来调用另一个重载的构造器?我把另一个构造器里的代码复制、粘贴到这个构造器...

    limone:从漏勺模式生成内容类型的工具

    以声明方式创建内容类型可以使用装饰器从模式定义中声明性地生成内容类型。 让我们以下面的漏勺模式为例,取自漏勺文档: import colanderclass Friend(colander.TupleSchema): rank = colander.SchemaNode(colander...

    frepple-data-admin:基于Django的企业数据应用程序快速开发框架

    frePPLe数据管理员 一个基于django的框架,用于快速开发数据管理应用程序。 在任何公司中,电子表格都是无处不在的。...使用Python代码声明数据模型,菜单,视图... 可扩展且安全: 准备进行云规模的部

    asymmetric-jwt-auth:使用JWT和RSA密钥对进行机器对机器身份验证的Django应用

    当该库与Django一起使用时,它提供了一个模型,用于存储与内置User对象关联的公共密钥。 提出请求后,客户端将创建一个包含多个声明的JWT并使用其私钥对其进行签名。 收到后,服务器会验证使用公钥的声明,以确保...

    struts in Action

    1.1.1. 谁创建了Struts?...................................................................................................19 1.1.2. 为什么Struts 要开源?....................................................

    freemarker总结

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    DOM全称是document object model(文档对象模型),DOM是用来干什么的呢?假设把你的文档看成一个单独的对象,DOM就是如何用HTML或者XML对这个对象进行操作和控制的标准。 面向对象的思想方法已经非常流行了,在编程...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下...

Global site tag (gtag.js) - Google Analytics