继承

继承(Inheritance):是面向对象软件技术当中的一个概念。如果一个类别A "继承自" 另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”,也可以称“B是A的超类”。

          重用代码

          属性和方法的继承

单继承和super函数

示例1:子类调用父类update_web(),执行父类update_web()

 #! /usr/bin/env python
# coding:utf-8 class Person(object): #新式类 def __init__(self,web_site): #初始化方法
self.web =web_site def update_web(self,site):
self.web =site
return self.web class Cc(Person): #继承了Person类,子类继承了一个父类,叫单继承 def about_me(self,name,site): #继承关系,调用父类update_web方法
my_web =self.update_web(site)
return {"name":name,"web":my_web} if __name__ =="__main__":
my =Cc("www.weibo.com")
print my.about_me("cc","cc.blog.com")
print my.web #output
#{'web': 'cc.blog.com', 'name': 'cc'}
#cc.blog.com

示例2:子类重写父类update_web()方法,在子类中调用,执行子类的update_web()方法

 #! /usr/bin/env python
# coding:utf-8 class Person(object): #新式类 def __init__(self,web_site): #初始化方法
self.web =web_site def update_web(self,site):
self.web =site
return self.web class Cc(Person): #继承了Person类,子类继承了一个父类,叫单继承 def update_web(self,site,lang="python"):#此处重写了父类的方法,或者是覆盖了父类的方法
self.web =site
self.lang =lang
return self.web,self.lang def about_me(self,name,site): #继承关系,此处调用子类的方法
my_web,my_lang=self.update_web(site)
return {"name":name,"web":my_web,"lang":my_lang} if __name__ =="__main__":
my =Cc("www.weibo.com")
print my.about_me("cc","cc.blog.com") #output
#{'lang': 'python', 'web': 'cc.blog.com', 'name': 'cc'}

示例3:调用父类中被覆盖的方法,使用super()函数,或者父类.方法名

 #! /usr/bin/env python
# coding:utf-8 class Person(object): #新式类 def __init__(self,web_site): #初始化方法
self.web =web_site def update_web(self,site):
self.web =site
return self.web class Cc(Person): #继承了Person类,子类继承了一个父类,叫单继承 def __init__(self,teacher,web_site):
self.teacher =teacher
#Person.__init__(self,web_site) #调用父类的init方法
super(Cc,self).__init__(web_site) #调用父类中被覆盖的方法 def update_web(self,site,lang="python"):#此处重写了父类的方法,或者是覆盖了父类的方法
self.web =site
self.lang =lang
return self.web,self.lang def your_teacher(self):
return self.teacher def about_me(self,name,site): #继承关系,此处调用子类的方法
my_web,my_lang=self.update_web(site)
return {"name":name,"web":my_web,"lang":my_lang} if __name__ =="__main__":
my =Cc("cclaoshi","cnblog.com")
print my.your_teacher()
print my.teacher
print my.web #output
#cclaoshi
#cclaoshi
#cnblog.com

多重继承

示例:

 #! /usr/bin/env python
# coding:utf-8 class Person(object): #新式类
def eye(self):
print "two eyes" def breast(self,n):
print "The breast is:",n class Girl(object):
def __init__(self,age):
self.age =age def color(self):
print "The girl is white." class BeaGirl(Person,Girl):#多继承,写入两个类的名字,将父类的所有方法继承过来
pass if __name__ =="__main__":
kong = BeaGirl(28)
kong.eye()
kong.breast(90)
kong.color()
print kong.age #output
#two eyes
#The breast is: 90
#The girl is white.
#

示例:多重继承的执行顺序,广度优先

 #! /usr/bin/env python
# coding:utf-8 class K1(object): #新式类
def foo(self):
print "K1-foo" class K2(object):
def foo(self):
print "K2-foo" def bar(self):
print "K2-bar" class J1(K1,K2):#多继承,写入两个类的名字,将父类的所有方法继承过来
pass class J2(K1,K2):
def bar(self):
print "J2-bar" class C(J1,J2):
pass if __name__ =="__main__":
print C.__mro__
m =C()
m.foo()
m.bar() #这种继承顺序称为广度优先
#output
#(<class '__main__.C'>, <class '__main__.J1'>, <class '__main__.J2'>,
# <class '__main__.K1'>, <class '__main__.K2'>, <type 'object'>)
#K1-foo
#J2-bar

Python 学习笔记(十五)Python类拓展(一)继承的更多相关文章

  1. Python学习第十五篇——类继承和类实例化

    学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...

  2. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  3. python 学习笔记十五 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  4. python学习笔记(十五)-unittest单元测试的一个框架

    unittest 单元测试的一个框架什么框架 一堆工具的集合. TestCase TestSuite 测试套件,多个用例在一起 TestLoader是用来加载TestCase到TestSuite中的 ...

  5. python学习笔记十二:类的定义

    demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...

  6. Python学习第十五课——类的基本思想(实例化对象,类对象)

    类的基本思想 类:把一类事物的相同的特征和动作整合到一起就是类类是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一块 对象写法 # 对象写法 def scho ...

  7. python学习笔记十五:日期时间处理笔记

    #-*- coding: utf-8 -*- import datetime #给定日期向后N天的日期 def dateadd_day(days): d1 = datetime.datetime.no ...

  8. python学习笔记(十五)-异常处理

    money = input('输入多少钱:') months = input('还几个月:') try: res = calc(int(money),int(months)) except ZeroD ...

  9. Python学习笔记整理(五)Python中的列表.

    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件.他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套. 一.列表 列表的主要属性: *任意对象的有序集合 从 ...

  10. python学习笔记(十六)-Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

随机推荐

  1. UOJ46. 【清华集训2014】玄学

    传送门 Sol 考虑对于操作时间建立线段树,二进制分组 那么现在主要的问题就是怎么合并信息 你发现一个性质,就是每个修改只会在整个区间内增加两个端点 那么我们二进制分组可以得到每个区间内最多只有区间长 ...

  2. Lucas定理及扩展

    Lucas定理 不会证明... 若\(p\)为质数 则\(C(n, m)\equiv C(n/p, m/p)*C(n\%p, m\%p)(mod\ p)\) 扩展 求 \(C(n,m)\) 模 \(M ...

  3. axios使用初涉

    看vue的时候,vue2.0推荐使用axios做http请求,今天就学一下axios基本使用. 安装 axios 推荐npm方法(npm是node.js环境下的包管理器): npm install a ...

  4. JavaScript-原型&原型链&原型继承&组合函数

    小小的芝麻之旅: 今天学习了js的原型,要说原型,我们先简单说一下函数创建过程. 原型 每个函数在创建的时候js都自动添加了prototype属性,这就是函数的原型,原型就是函数的一个属性,类似一个指 ...

  5. java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?

    死锁.活锁.饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了. 死锁 死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又 ...

  6. ActiveMQ 用户名密码设置

    用户名密码信息保存在conf/jetty-realm.properties文件中 按顺序分别是:用户名.密码.角色名 另:ActiveMQ使用的是jetty服务器, 可以通过设置conf/jetty. ...

  7. Python实例---三级菜单的实现[low]

    # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...

  8. 乘风破浪:LeetCode真题_021_Merge Two Sorted Lists

    乘风破浪:LeetCode真题_021_Merge Two Sorted Lists 一.前言 关于链表的合并操作我们是非常熟悉的了,下面我们再温故一下将两个有序链表合并成一个的过程,这是基本功. 二 ...

  9. laravel controller重写

    <?php namespace Boss\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illumina ...

  10. 初进MFC的世界,太奇妙。第六次作业----未完待续

    又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...