创建简单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 2.x和3.x之间,对象模型有一些细微的变化,但基本概念保持一致。例如,Python 3.x中所有类都自动继承自`abc.ABCMeta`,这是一个抽象基类,这在Python 2.x中是需要显式声明的。 了解这些基本概念后,我们...
独有变量在创建对象后声明,只有当前对象具有此变量。 成员方法用于描述对象的固有行为。成员方法可以分为无参方法和有参方法。无参方法的定义语法格式为 `class 类名:def 方法名(self):方法体`,而有参方法的定义...
EdgeDB提供了一种名为EdgeQL的查询语言,它是一种声明式的、面向对象的语言,专门设计用于处理复杂的查询和操作。EdgeQL允许开发者以类似SQL的方式进行查询,但更加灵活,能够更好地适应对象模型,支持链式查询和多...
标题中的“Python-一个受React启发的声明库用于在纯Python中构建基于DOM的用户界面”揭示了一个Python库,它采用了React的某些设计理念,用于在Python环境中创建DOM(文档对象模型)驱动的用户界面。React是...
Java使用类和对象来组织代码,而Python则支持多种面向对象的特性,包括类、对象、以及函数式编程元素。此外,Java的控制流程(如if-else,for循环)和异常处理与Python也有所不同。 在实际的转换过程中,工具可能会...
这包括Python的语法特性,如缩进规则、变量声明、字符串操作、列表、元组、字典和集合等数据结构的使用。理解这些基础知识,有助于应对涉及代码逻辑和数据操作的问题。 其次,控制流结构,如条件语句(if-else)、...
在学习过程中,结合具体案例进行实践是非常重要的,比如在Django中创建模型,或者利用Scrapy爬虫框架构建网络爬虫时,都会大量运用到面向对象编程的思想和技术。通过深入理解和实践,你可以更好地掌握Python的高级...
6. **面向对象**:Python支持面向对象编程,可以创建类和对象,实现封装、继承和多态。 **Python基础** - **变量与数据类型**:包括整型(int)、浮点型(float)、字符串(str)、布尔型(bool)、列表(list)、元组(tuple...
2. **动态类型**:Python是动态类型语言,变量声明时无需指定数据类型,可以在运行时改变。 3. **内置数据结构**:Python提供了丰富的内置数据结构,如列表(list)、元组(tuple)、字典(dictionary)和集合(set...
总结起来,Python的面向对象特性——封装、继承和多态,共同构建了强大的编程模型,它不仅简化了大型项目的设计,还提高了代码的可读性和可维护性。理解和熟练运用这些特性,对于成为一名优秀的Python开发者至关重要...
Python编程语言具有很高的灵活性,它支持多种编程方法,包括过程化的、面向对象的和函数式的。但最重要的是,在Python中编写程序是件令人愉悦的事。该语言对开发进程有支持作用,决不会妨碍它。 Python中的每样...
Python采用动态类型系统,变量不需要显式声明类型。它的执行模型基于解释器,可以逐行执行代码。 **2.8 名称与命名空间** Python中的每个对象都有一个唯一的名称,用于引用该对象。命名空间用于跟踪对象的名称。...
理解类和对象的概念,知道如何定义类,创建实例,以及使用继承、封装和多态性,这些都是Python中不可或缺的知识点。 文件操作也是Python程序员必须掌握的技能,包括读写文件、处理文本和二进制数据,以及文件和目录...
6. **面向对象编程**:Python支持面向对象编程,包括类的定义、对象的创建、继承、封装、多态等概念。 7. **文件操作**:学习如何打开、读取、写入和关闭文件,以及文件对象的常用方法。 8. **正则表达式**:...
6. **面向对象编程**:Python支持类和对象,可以创建复杂的面向对象设计,包括继承、封装和多态等概念。 7. **生成器(Generator)**:Python 2.6引入了生成器,这是一种特殊的迭代器,可以节省内存,尤其在处理...
- **封装与抽象**: 封装是指隐藏对象的具体实现细节,抽象则是将复杂问题简化为更简单的概念模型。 #### 七、文件操作与输入输出 - **文件读写**: 文件操作是编程中常见的任务,学习如何打开、读取、写入和关闭...
4. **面向对象编程**:讲解了Python中的类和对象概念,包括类的定义、对象的创建、继承、多态、封装等面向对象特性。同时,也介绍了装饰器、上下文管理器等高级用法。 5. **异常处理**:Python的错误和异常处理机制...
理解类和对象的概念,以及如何创建和使用它们,是Python编程的重要部分。 3. **模块与包**:Python中的模块允许组织和重用代码,而包则提供了一种更高级的模块组织方式。学会导入和使用内置模块,以及创建自定义...
6.20 *拷贝Python对象、浅拷贝和深拷贝 6.21 序列类型小结 6.22 练习 第7章 映像和集合类型 7.1 映射类型:字典 7.1.1 如何创建字典和给字典赋值 7.1.2 如何访问字典中的值 ...
在与Python后端配合时,Vue.js可以用来创建交互式的前端界面,提供动态数据绑定和可复用的组件,提升用户体验。 标签中的"python"表明主题与Python编程语言相关,"python273"和"python-2.7.3"是Python 2.7.3版本的...