Python基础:16面向对象概述
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 = nm
self.phone = ph
print 'Createdinstance for:', self.name def updatePhone(self,newph):
self.phone =newph
print 'Updatedphone# for:', self.name class EmplAddrBookEntry(AddrBookEntry):
'Employee Address BookEntry class' def __init__(self, nm,ph, id, em):
AddrBookEntry.__init__(self, nm,ph)
self.empid = id
self.email = em def updateEmail(self,newem):
self.email =newem
print '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 father class 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来工作的一个最重要的原因,在于它直接提供建模和解决现实世界问题和情形的途径。
Python基础:16面向对象概述的更多相关文章
- python基础16 ----面向对象程序设计二
一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- Python入门篇-面向对象概述
Python入门篇-面向对象概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.语言的分类 面向机器 抽象成机器指令,机器容易理解 代表:汇编语言 面向过程 做一件事情,排出个 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- 二十. Python基础(20)--面向对象的基础
二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...
- 十六. Python基础(16)--内置函数-2
十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Python基础7 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...
随机推荐
- pc端样式重置以及常用样式规范class
//reset html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...
- python基础(输出、变量、常量、数据类型、流程控制)
输出 print print("Hello World!") # python2 和 python3 的区别 # python2 # coding:utf-8 print 123 ...
- 备忘录模式(Memento、Originator、Caretaker)(状态保存,备份恢复)
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时 ...
- CentOS 6.8 Java 环境搭建
1.搜索 Java 1.7 64 2.下载 文件 3.Xshell 安装lrzsz 4.选择路径 5.使用 rz 命令选择上传 6.打开 /etc/profile vim /etc/profile ...
- JavaScript 中的多线程通信的方法
在Html 5诞生之后,我们可以使用javascript来实现多线程处理.H5 新增了一个web workers api,使用这个API,用户可以很容易地创建在后台运行的线程,H5 中被称为workd ...
- Data Visualisation Cheet Sheet
Univariate plotting with pandas import pandas as pd reviews = pd.read_csv() reviews.head() //bar rev ...
- 支付宝 python alipay 集成(转)
即时到帐只是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款,支付宝收到款项后,马上通知你,并且此笔款项与交易脱离关系,商家可以马上使用. 即时到帐只对企业客户服务,注册成功企业账号以后,申 ...
- SpingBoot myBatis neo4j整合项目案例
此项目为spring boot - myBatis - neo4j数据库整合项目. 有增删改查(节点关系).动态分页条件排序等一些示例. git下载地址:git clone https://githu ...
- php各种字符串截取
各种字符串截取.php <?php /** * 字符串截取,支持中文和其他编码 * @param [string] $str [字符串] * @param integer $start [起始位 ...
- KiCad 元件值 F4NNIU 规范(2019-10-10)
目录 KiCad 元件值 F4NNIU 规范 电阻 电容 电感 二极管 三极管 MOSFET IC 文件历史 KiCad 元件值 F4NNIU 规范 为方便物料统计以及规范物料,在制造 BOM 时可以 ...