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面向对象概述的更多相关文章

  1. python基础16 ----面向对象程序设计二

    一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...

  2. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  3. Python入门篇-面向对象概述

    Python入门篇-面向对象概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.语言的分类 面向机器 抽象成机器指令,机器容易理解 代表:汇编语言 面向过程 做一件事情,排出个 ...

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

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

  5. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  6. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  7. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  8. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  9. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  10. Python基础7 面向对象编程进阶

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

随机推荐

  1. poweroj1745: 餐巾计划问题

    传送门 最小费用最大流. 每天拆成两个点,i表示用完的餐巾,i+n表示干净的餐巾. s向i连容量为ri费用为0的边,表示每天用脏的ri条餐巾. i+n向t连容量为ri费用为0的边,表示每天需要用ri条 ...

  2. mac 安装svn

    别人说用Xcode装,我也不知道我这个是不是用Xcode装的 在命令行界面输入 sudo bash svn --version 会出现一大段介绍,关于xcode的,我也不懂,一只敲空格键到最后,然后输 ...

  3. js &&操作符解析

    转载自:http://www.cnblogs.com/huchaoheng/p/4066473.html 前几天看到一个函数,百思不得其解,今天早上醒来看了本js的书,正好讲到操作符的用法,给大家分享 ...

  4. ubuntu setup.py 安装时报Error -5 while decompressing data: incomplete or truncated stream

    缺少 python-devel 包 apt-get install python-dev -y

  5. 使用junit单元测试,报Cannot instantiate test(s): java.lang.SecurityException: Prohibited package name: java.com.com.test

    在测试类中不能一级包名不能以java开头, 将包改为com.com.test就好了.

  6. yield和return

    yield 是用于生成器.什么是生成器,你可以通俗的认为,在一个函数中,使用了yield来代替return的位置的函数,就是生成器.它不同于函数的使用方法是:函数使用return来进行返回值,每调用一 ...

  7. 初探Druid

    说到连接池,最常见的就是dbcp和c3p0,关于druid,官方定义是为监控而生的数据库连接池. 官方中文文档地址:https://github.com/alibaba/druid/wiki/%E5% ...

  8. POJ1182 NOI2001 食物链

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 77428   Accepted: 23067 Description ...

  9. 用 Python 写一个 NoSQL 数据库Python

    NoSQL 这个词在近些年正变得随处可见. 但是到底 “NoSQL” 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Python (我比较喜欢叫它, “轻结构化的伪代码”) 写 ...

  10. iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料

    注意要加头文件目录 /System/Library/Frameworks/CoreTelephony.framework/Headers 到 build 设置 Header Search Paths, ...