1:在版本2.2 中,Python社区最终统一了类型(type)和类(class),新式类具备更多高级的OOP特性,扮演了一个经典类(旧式类)超集的角色,后者是Python 诞生时所创造的类对象。

2:下面的示例展示了如何创建一个类:

class  MyNewObjectType(bases):'define MyNewObjectTypeclass'class_suite

新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类,参数bases可以是一个(单继承)或多个(多重继承)用于继承的父类。

object 是“所有类之母”。它位于所有类继承结构的最上层。如果你没有直接或间接的子类化一个对象,那么你就定义了一个经典类:

class  MyNewObjectType:'define  MyNewObjectType  classic  class'class_suite

很多Python类都还是经典类。即使经典类已经过时了,在以后的Python 版本中,仍然可以使用它们。不过我们强烈推荐你尽可能使用新式类。

3:使用类最简单的情况,类仅用作名称空间(namespaces)。这意味着你把数据保存在变量中,对他们按名称空间进行分组,使得他们处于同样的关系空间中。类似于C语言中的结构体(structures)一样的特性。

4:在类中定义方法:

class  MyDataWithMethod(object):        def  printFoo(self):print  'You invoked printFoo()!'

self 参数代表实例对象本身,当用实例调用方法时,由解释器将该实例传递给方法。所以,不需要自己传递self 进来。一般的方法会需要这个实例(self),而静态方法或类方法不会。

实例化这个类,然后调用那个方法:

>>> myObj = MyDataWithMethod()
>>> myObj.printFoo()
You invoked printFoo()!

5:在Python 中,__init__()实际上不是一个构造器。Python 创建实例后,调用__init__()方法。

6:

class AddrBookEntry(object):'address book entryclass'def __init__(self, nm,ph):self.name = nmself.phone = phprint 'Createdinstance for:', self.namedef updatePhone(self,newph):self.phone =newphprint 'Updatedphone# for:', self.nameclass EmplAddrBookEntry(AddrBookEntry):'Employee Address BookEntry class'         def __init__(self, nm,ph, id, em):AddrBookEntry.__init__(self, nm,ph)self.empid = idself.email = emdef updateEmail(self,newem):self.email =newemprint 'Updatede-mail address for:', self.name

Python中,当一个类被派生出来,子类继承了基类的属性,所以,在上面的类中,我们不仅定义了__init__(),updatEmail()方法,而且EmplAddrBookEntry 还从AddrBookEntry 中继承了updatePhone()方法。

每个子类最好定义它自己的构造器__init__(),不然,基类的构造器会被调用。然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了--这样,基类的构造器就必须显式写出才会被执行,像我们上面那样,用AddrBookEntry.__init__()设置名字和电话号码。这里我们要显式传递self实例对象给基类构造器,因为我们不是在其实例中调用那个方法而是在一个子类实例中调用那个方法。

class  father(object):def  __init__(self):print 'this is father'class  child(father): pass>>> c  =  child()
this is fatherclass  father(object):def __init__(self):print 'this is father'class  child(father):def  __init__(self):print 'this is child'>>> c =test.child()
this  is  child

7:面向对象设计(OOD)不会特别要求面向对象编程语言。事实上,OOD 可以由纯结构化语言来实现,比如C。

考虑用OOD来工作的一个最重要的原因,在于它直接提供建模和解决现实世界问题和情形的途径。

转载于:https://www.cnblogs.com/gqtcgq/p/7247199.html

Python基础:16面向对象概述相关推荐

  1. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  2. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  3. Python基础_07_面向对象1

    python基础7_面向对象1 文章目录 python基础7_面向对象1 一.面向对象:类和对象.魔法方法 1. 面向对象编程概述 1.1[了解]面向过程和面向对象的区别 1.2[知道]类和对象介绍 ...

  4. python基础之面向对象编程

    python基础之面向对象编程 面向对象编程思想 面向对象是一门编程思想,编程思想仅仅是一门思想,与任何技术无关 核心是对象两字,对象可以理解为特征与技能的结合体 基于该编程思想编写程序,就好比创造世 ...

  5. 5.Python基础之面向对象

    文章目录 Python基础之面向对象 面向对象的三大特性 类和对象的关系 类的组成 类的书写规则 实例化对象 检测类和对象的成员 类和对象成员的操作 类成员操作 对象成员操作 关于self 封装特性 ...

  6. 【Python基础】面向对象封装 案例(二)

    目录 案例二 1.首先开发 枪类 2.接着开发 士兵类 3.开发 开火类. 案例一在这里: [Python基础]面向对象封装 案例(一) 案例二 仍然是一步一步开发.同时,下面的第3小步是完整代码,亦 ...

  7. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  8. python基础以及面向对象

    python基础 python基础 第一单元 Python解释器和IDE的安装和初步使用 **一.昨日知识点回顾** **二.本单元知识点概述** (Ⅰ)指定教材 (Ⅱ)知识点概述 (Ⅲ)教学时长 * ...

  9. Day7 - Python基础7 面向对象编程进阶 --转自金角大王

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  10. [转载] python基础:面向对象-封装

    参考链接: Python中的面向对象编程2(数据隐藏和对象打印) 文章目录 1.封装的含义2.封装示例1.python中封装功能的实现 3.封装的好处1.封装数据2.降低复杂度 4.封装的特性1.@p ...

最新文章

  1. linux 命令行(给自己看的)
  2. 2010年5月八达岭野生公园 51CTO老虎围观团强力插入
  3. 钉钉自定义机器人python_使用钉钉自定义机器人发送舔狗日记[70行][python]
  4. poj 1716 差分约束
  5. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...
  6. PMP知识点(八、沟通管理)
  7. C#多线程开发-使用并发集合
  8. js实现撤销恢复_电脑硬盘丢失的资料怎么恢复?选对方法是关键
  9. [SceneKit] 不会 Unity3D 的另一种选择
  10. 北理乐学c语言答案猴子,【北理乐学】机智的大师
  11. ArcGIS拓扑关系建立概述
  12. C# 调用dll文件
  13. 精益生产管理中如何进行库存成本控制?
  14. 什么是GB18030编码?
  15. 华为云IOT平台设备获取api调用笔记
  16. xpanx原理解析 | 只要 3 秒!抖音视频无水印下载
  17. nginx入门-个人总结
  18. 名编辑电子杂志大师教程 | 隐藏不需要的功能按钮
  19. iOS 应用内跳转到百度地图、苹果地图、谷歌地图、高德地图等
  20. Android NDK 减少 so 库体积方法总结

热门文章

  1. nvidia TX2 CUDA yolov5环境搭建
  2. python实现解析oui.txt并抽取MAC前缀及组织名称
  3. 白噪音和粉红噪音煲机_白噪音信号的概念及基本理论
  4. 【kafka】kafka 查看 topic 详情的 几种 方法
  5. 【Flink】Flink 1.13 Flink SQL 新特性 性能优化 时区 时间 纠正
  6. 【clickhouse】clickhouse 利用Grafana与系统表监控ClickHouse查询
  7. 【hortonworks/registries】Parameter Schema name is null
  8. 95-241-102-源码-Flink语义-Flink的exectly-once系列之两阶段提交实现分析
  9. 【FastJson】FastJson一个Bug java.util.LinkedHashMap cannot be cast to com.alibaba.fastjson.Jsonobject
  10. 22-win10下ElasticSearch.6.1.0与logstash6.1.0的整合