具体参考博客:http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label12

一.面向对象

面向对象:对象与对象之间的相互交互,不可预测最终的结果

  对象是特征 <变量> 与技能 <函数> 的结合体。

  类是一系列对象的共同特征与技能的结合体。

  程序中,先有类再有对象,类是抽象的<模板>,而对象是真实存在的。

class Teacher(object):       #class 定义类,类的首字母大写
school='偶的博爱' #变量 <数据属性>
def __init__(self,name,age): #初始化,以便对象的各自属性
self.name=name
self.age=age
def teach(self): #函数属性
print('is teaching ') p1=Teacher('egon',) #对象

  Tips:__init__方法只能干初始化的活,可以加任何可执行的代码,但不能有返回值。 

     __dict__查看名称空间<名称空间存放着名字与值的绑定关系>

    在python3中类型就是类,比如我们常说的列表/元组/集合/字典 都是类。

    创建类的过程,如果不添加父类,则默认基类(object).

 1.1实例化

  实例化产生对象.比如p1=Teacher(),Teacher() 就是实例化,也就是说创建实例是通过类名+()实现的,而p1是实例化对象.

类的作用:

  1.实例化对象

    p1=Teacher()

  2.类的属性引用:数据属性与函数属性

    Teacher.school   #数据属性

    Teacher.teach  #函数属性

    Teacher.teach()  #类调用函数属性的时候,必须传值

对象的作用:

  1.属性引用

    p1.school       #数据属性

    p1.teach()      #函数属性,对象在引用函数属性的时候会默认传值,将对象p1传值到self中。

  对象修改不了类的属性,我们看到的修改其实只是在对象里面创建了一个名称空间,如果你再在类里面创建新的对象2,对象2调用该属性会以类的属性为准。

二:继承与派生

  继承是类与类之间的关系,一种什么“是”什么的关系.子类继承父类,会拥有父类的所有属性。

class People:
pass class Animal:
pass class Student(People,Animal): #people称为基类或父类
pass print(Student.__bases__)
print(People.__bases__)
print(Animal.__bases__)
#在python3中,所有类默认继承object,
#但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类)
#没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类)

  继承举例:

class People:
def __init__(self, name, age)
self.name = name
self.age = age
def walk(self):
print('%s is walking' %self.name) class Teacher(People): #在括号里里面加父类,表示继承父类
pass #此时Teacher类具备People的所有属性

  派生:子类在继承父类的所有属性后,自身又具备一些特有的属性,我们在__init__()后面为其添加新的属性,称为派生  

  派生举例:

class People:
def __init__(self, name, age)
self.name = name
self.age = age
def walk(self):
print('%s is walking' %self.name) class Student(People): #调用的父类为People
def __init__(self, name, age,sex,group):
People.__init__(self, name, age, sex)
self.group=group #group是学生特有的属性,即为派生
def study(self):
print('%s is studying' %self.name)

三:组合

   #组合:是一种什么 “有” 什么的关系,也是为了减少重复代码。  区别于继承,它并不是继承其所有属性。而是我应该有什么属性,避免重复代码,我去引用这个组合。

class People:                       #人类
def __init__(self, name, age, year, mon, day):
self.name = name
self.age = age
self.birth = Date(year, mon, day) ------>人类并不是时间,而只是人有生日这个属性,所有去引用时间类,目的是为了减少代码冗余。而我们创建的老师类,学生类,则是继承,因为老师 学生属于人类. def walk(self):
print('%s is walking' % self.name) class Date: #时间类
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day def tell_birth(self):
print('出生于<%s>年 <%s>月 <%s>日' % (self.year,self.mon,self.day))

  Tips:1.  后面接的都是属性

     2..___bases__    查看其父类,默认为object类。

      凡是集成了object类的子类,以及该子类的子类,都是新式类<在python3中所有的类都是新式类<默认>>

      没有object的类的子类都是经典类,(在python2中,没有继承object的类,以及它的子类都是经典类)

四:接口

  python中压根没有interface关键词来定义一个接口,但可以定义Interface来模仿接口的概念。

父类要限制:

  #1:子类必须要有父类的方法
  #2:子类实现的方法必须跟父类的方法的名字一样
class Interface:#定义接口Interface类来模仿接口的概念,python中压根就没有interface关键字来定义一个接口。
def read(self): #定接口函数read
pass def write(self): #定义接口函数write
pass class Txt(Interface): #文本,具体实现read和write
def read(self):
print('文本数据的读取方法') def write(self):
print('文本数据的读取方法')

抽象类:
   python中抽象类需要借助模块来实现,抽象类是一种特殊的类,它的特殊之处是只能被继承不能别实例化.
import abc                         ##引入abc模块
class File(metaclass=abc.ABCMeta):
@abc.abstractmethod ##
def read(self):
pass @abc.abstractmethod
def write(self):
pass class Txt(File): #文本,具体实现read和write
def read(self):
pass
def write(self):
pass
t=Txt()
 

python 面向对象 继承 派生 组合的更多相关文章

  1. Python 面向对象--继承,实现,依赖,关联,聚合,组合

    一. 继承 继承指的是子类继承父类除私有内容以外的其他所有内容, 并且子类具有增加自己新内容的能力. 举例说明: class Animal: print("吃是动物的本能") cl ...

  2. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  3. Python面向对象继承案例

    面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活 ...

  4. python面向对象 : 继承

    一. 初识继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. 当我们在定义多个类的时候,发现要用到相同的方法或变量,如 ...

  5. python 面向对象 继承

    什么是继承 继承表达的是一种”是“的关系,比如人是动物 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 继承是基于抽象的结 ...

  6. Python面向对象-继承和多态特性

    继承 在面向对象的程序设计中,当我们定义一个class时候,可以从现有的class继承,新的class成为子类,被继承的class称为基类,父类或超类. 比如,编写一个名为Animal的class: ...

  7. python面向对象继承

    class A(object):pass # 括号中可称为父类,基类,超类 class B:pass # 父类,基类,超类 class A_son(A,B):pass # 子类,派生类 class A ...

  8. python面向对象之类的组合

    一.python类的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象二.组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系.三.例子模拟英雄联盟写一个游戏人物的类 要求:(1 ...

  9. Python面向对象 -- 继承和多态、获取对象信息、实例属性和类属性

    继承和多态 继承的好处: 1,子类可以使用父类的全部功能 2,多态:当子类和父类都存在相同的方法时,子类的方法会覆盖父类的方法,即调用时会调用子类的方法.这就是继承的另一个好处:多态. 多态: 调用方 ...

随机推荐

  1. 修改Vim内注释字体颜色

    vim /etc/vimrc   然后按大写  G 到最后一行,插入 hi comment ctermfg=6          wq保存退出 PS:默认的注释颜色是4  然后有0,1,2,3,4,5 ...

  2. [Offer收割] 编程练习赛63

    题目1 : 命名 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 有两个公司想要合并,第一个公司的名字是一个字符串S,第二个公司的名字是一个字符串T. 合并后的新公司是这样 ...

  3. bzoj 3473 字符串 - 后缀数组 - 树状数组

    题目传送门 传送门 题目大意 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串 先用奇怪的字符把所有字符串连接起来. 建后缀树,数每个节点的子树内包含多少属 ...

  4. 纸小墨ink简洁主题story爱上你的故事

    主题介绍 为纸小墨写的一款主题,该主题移植自Yumoe github地址:ink-theme-story Demo ink-theme-story 主题的一些食用说明 菜单 标题旁边有一个 · 字符, ...

  5. centos 7安装phantomjs

    centos 7安装phantomjs wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_6 ...

  6. webdriver API

    切换iframe 1.iframe有id和name driver.switch_to_frame(loc) 2.iframe无id和name 先用xpath定位找到iframe.再switch ifr ...

  7. Vue-admin工作整理(九): 状态管理Vuex-state和getters

    前提:通过项目结构个人设置创建的项目 store文件下actions.js.mutations.js.state.js都是根级别的状态管理,引用入口是通过index.js来实现,整个Vuex处理逻辑为 ...

  8. git删除远程分支,删除本地分支

    远程 # git push origin --delete duck - [deleted] duck 本地 # git branch -d duck 已删除分支 duck(曾为 dda11b8). ...

  9. SparkStreaming流处理

    一.Spark Streaming的介绍 1.       流处理 流式处理(Stream Processing).流式处理就是指源源不断的数据流过系统时,系统能够不停地连续计算.所以流式处理没有什么 ...

  10. 2019.4.24(js)

    1. 取得正数和负数的绝对值 Math.abs(7.25) Math.abs(-7.25) 2.利用JS刷新页面方法 https://www.cnblogs.com/Chen-XiaoJun/p/62 ...