`
marlonyao
  • 浏览: 252805 次
  • 性别: 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的类型和对象

    在Python 2.x和3.x之间,对象模型有一些细微的变化,但基本概念保持一致。例如,Python 3.x中所有类都自动继承自`abc.ABCMeta`,这是一个抽象基类,这在Python 2.x中是需要显式声明的。 了解这些基本概念后,我们...

    python面向对象概念及练习题.doc

    独有变量在创建对象后声明,只有当前对象具有此变量。 成员方法用于描述对象的固有行为。成员方法可以分为无参方法和有参方法。无参方法的定义语法格式为 `class 类名:def 方法名(self):方法体`,而有参方法的定义...

    Python-Disclaimer下一代对象关系数据库

    EdgeDB提供了一种名为EdgeQL的查询语言,它是一种声明式的、面向对象的语言,专门设计用于处理复杂的查询和操作。EdgeQL允许开发者以类似SQL的方式进行查询,但更加灵活,能够更好地适应对象模型,支持链式查询和多...

    Python-一个受React启发的声明库用于在纯Python中构建基于DOM的用户界面

    标题中的“Python-一个受React启发的声明库用于在纯Python中构建基于DOM的用户界面”揭示了一个Python库,它采用了React的某些设计理念,用于在Python环境中创建DOM(文档对象模型)驱动的用户界面。React是...

    java2python--java代码转python工具

    Java使用类和对象来组织代码,而Python则支持多种面向对象的特性,包括类、对象、以及函数式编程元素。此外,Java的控制流程(如if-else,for循环)和异常处理与Python也有所不同。 在实际的转换过程中,工具可能会...

    Python面试宝典(完整版),python程序员面试宝典pdf,Python

    这包括Python的语法特性,如缩进规则、变量声明、字符串操作、列表、元组、字典和集合等数据结构的使用。理解这些基础知识,有助于应对涉及代码逻辑和数据操作的问题。 其次,控制流结构,如条件语句(if-else)、...

    完整版 Python高级开发课程 高级教程 04 Python面向对象编程.pptx

    在学习过程中,结合具体案例进行实践是非常重要的,比如在Django中创建模型,或者利用Scrapy爬虫框架构建网络爬虫时,都会大量运用到面向对象编程的思想和技术。通过深入理解和实践,你可以更好地掌握Python的高级...

    Python Tutorial Python

    6. **面向对象**:Python支持面向对象编程,可以创建类和对象,实现封装、继承和多态。 **Python基础** - **变量与数据类型**:包括整型(int)、浮点型(float)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple...

    简明Python教程(Python3中文版)

    2. **动态类型**:Python是动态类型语言,变量声明时无需指定数据类型,可以在运行时改变。 3. **内置数据结构**:Python提供了丰富的内置数据结构,如列表(list)、元组(tuple)、字典(dictionary)和集合(set...

    Python语言基础:对象.pptx

    总结起来,Python的面向对象特性——封装、继承和多态,共同构建了强大的编程模型,它不仅简化了大型项目的设计,还提高了代码的可读性和可维护性。理解和熟练运用这些特性,对于成为一名优秀的Python开发者至关重要...

    Python从入门到精通

    Python编程语言具有很高的灵活性,它支持多种编程方法,包括过程化的、面向对象的和函数式的。但最重要的是,在Python中编写程序是件令人愉悦的事。该语言对开发进程有支持作用,决不会妨碍它。 Python中的每样...

    Learning Python

    Python采用动态类型系统,变量不需要显式声明类型。它的执行模型基于解释器,可以逐行执行代码。 **2.8 名称与命名空间** Python中的每个对象都有一个唯一的名称,用于引用该对象。命名空间用于跟踪对象的名称。...

    python趣味编程100例(99个)

    理解类和对象的概念,知道如何定义类,创建实例,以及使用继承、封装和多态性,这些都是Python中不可或缺的知识点。 文件操作也是Python程序员必须掌握的技能,包括读写文件、处理文本和二进制数据,以及文件和目录...

    Python3.7.2中文文档-Python教程-合集

    6. **面向对象编程**:Python支持面向对象编程,包括类的定义、对象的创建、继承、封装、多态等概念。 7. **文件操作**:学习如何打开、读取、写入和关闭文件,以及文件对象的常用方法。 8. **正则表达式**:...

    python-2.6.6 安装包

    6. **面向对象编程**:Python支持类和对象,可以创建复杂的面向对象设计,包括继承、封装和多态等概念。 7. **生成器(Generator)**:Python 2.6引入了生成器,这是一种特殊的迭代器,可以节省内存,尤其在处理...

    python基础教程(智普教育自编分享).pdf

    - **封装与抽象**: 封装是指隐藏对象的具体实现细节,抽象则是将复杂问题简化为更简单的概念模型。 #### 七、文件操作与输入输出 - **文件读写**: 文件操作是编程中常见的任务,学习如何打开、读取、写入和关闭...

    Python参考手册 第4版

    4. **面向对象编程**:讲解了Python中的类和对象概念,包括类的定义、对象的创建、继承、多态、封装等面向对象特性。同时,也介绍了装饰器、上下文管理器等高级用法。 5. **异常处理**:Python的错误和异常处理机制...

    Python核心编程第三版 资源_python_

    理解类和对象的概念,以及如何创建和使用它们,是Python编程的重要部分。 3. **模块与包**:Python中的模块允许组织和重用代码,而包则提供了一种更高级的模块组织方式。学会导入和使用内置模块,以及创建自定义...

    Python核心编程第二版

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

    python-2.7.3.msi

    在与Python后端配合时,Vue.js可以用来创建交互式的前端界面,提供动态数据绑定和可复用的组件,提升用户体验。 标签中的"python"表明主题与Python编程语言相关,"python273"和"python-2.7.3"是Python 2.7.3版本的...

Global site tag (gtag.js) - Google Analytics