1. 单继承 / 多继承 / 菱形继承

# ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法
"""
一个类可以继承另外一个类,那么当前类是子类(衍生类),被继承的类是父类(基类,超类) python中继承的种类:
(1) 单继承
(2) 多继承 object 是所有类的父类
""" # (1) 基本语法
class Human():
hair = "黑色"
__age = 18 def eat(self):
print("远古人类天生吃猎物,烤着吃") def sleep(self):
print("远古人类睡觉的时候打呼噜") def __makebaby(self):
print("远古人类,一天能造出3个孩子") # (1) 子父继承之后 , 子类可以调用父类的公有成员
class Man(Human):
pass obj = Man()
print(obj.hair)
obj.eat() # (2) 子父继承之后 , 子类不可以调用父类的私有成员
class Woman(Human):
def myfunc(self):
print(self.hair)
# 无法调用父类私有成员
# print(self.__age) obj = Woman()
obj.myfunc() # (3) 子父继承之后 , 子类可以改写父类公有成员
"""
子父继承之后,如果子类含有该成员,先优先调用自己的,
如果子类中不含有该成员,调用父类的,
父类如果也没有,直接报错
"""
class Children(Human):
def eat(self):
print("儿童下生都喝奶奶") obj = Children()
obj.eat()

单继承 示例代码

# ### 多继承 : 一个子类有多个父类

# (1) 基本语法
class Father():
f_property = "玉树临风,花见花开,一枝梨花压海棠"
def f_hobby(self):
print("抽烟喝酒烫头,坑蒙拐骗偷") class Mother():
m_property = "俏皮可爱,沉鱼落雁,一直红杏出墙来"
def m_hobby(self):
print("打麻将,做头发,修电脑,买包包") class Daughter(Father , Mother):
pass obj = Daughter()
print(obj.f_property)
obj.m_hobby() # (2) super的使用
"""
(1)super本身是一个类 super()是一个对象 用于调用父类的绑定方法
(2)super() 只应用在绑定方法中,默认自动传递self对象 (前提:super所在作用域存在self)
(3)super用途: 解决复杂的多继承调用顺序
"""
print("<=================>")
class Father():
f_property = "玉树临风,花见花开,一枝梨花压海棠"
def f_hobby():
print("抽烟喝酒烫头,坑蒙拐骗偷") class Mother():
m_property = "俏皮可爱,沉鱼落雁,一直红杏出墙来"
def m_hobby(self):
print("打麻将,做头发,修电脑,买包包") # 子类调用父类方法
class Son(Father,Mother):
f_property = "头发是自来卷,说话是英国味,老婆说是胎教学的"
m_property = "皮肤颜色是黑色的,黑种人,跟老爸长得不像" # 1.利用类的方式调用成员属性和方法
def skill1(self):
print(Father.f_property)
Father.f_hobby() # 2.利用self调用父类的成员属性和方法
def skill2(self):
print(self.m_property)
self.m_hobby() # 3.利用super电泳父类的成员属性和方法
def skill3(self):
print(super().f_property)
super().m_hobby()
# super() 只能调用绑定方法,默认传递self参数;
# super().f_hobby() error obj = Son()
# obj.skill1()
# obj.skill2()
obj.skill3() """
self 与 super 的区别
self 在调用父类成员时,如果自己本类含有该成员,调用自己的,否则调用父类的
super 永远只调用父类成员,不调用自己本类的
"""

多继承 示例代码

# ### 菱形继承 (钻石继承)
"""
Human
Man Woman
Children
"""
class Human():
pty = 1
def feelT(self):
print("远古人类,天热了,退毛1")
"""
super调用方法时,会默认携带self对象进行传递
从children 一直传递到最上层 Human
通过self调用pty属性 得到4
"""
print(self.pty)
print("远古人类,天冷了,涨毛2") class Man(Human):
pty = 2
def feelT(self):
print("现代人类,天热了,喝啤酒,开空调,吃烤串3")
super().feelT()
print("现代人类,洗热水脚,剃光头,喝白酒4") class Woman(Human):
pty = 3
def feelT(self):
print("女人天热了,脱光光,吹空调,扇扇子,喝热水5")
super().feelT()
print("女人天冷了,喝热水,穿貂皮,上火炕6") class Children(Man,Woman):
pty = 4
def feelT(self):
print("小孩天热了,打游戏,吃冰管,敲代码7")
super().feelT()
print("小孩天冷了,穿棉袄,用暖宝宝放衣服里8") obj = Children()
obj.feelT()
"""
mro列表:方法调用顺序列表
语法: 类.mro() 使用C3算法计算,返回一个列表
super() 就是按照这个列表的顺序,依次进行调用
"""
lst = Children.mro()
print(lst) """
[
<class '__main__.Children'>,
<class '__main__.Man'>,
<class '__main__.Woman'>,
<class '__main__.Human'>,
<class 'object'>
]
73512648
"""
# super 就是用来解决多继承,复杂的调用关系(成员名字相同的情况下)

菱形继承 示例代码

2. 类的多态

# ### 多态 :不同的子类对象,调用相同的父类方法,产生不同的执行结果
"""
关键字: 继承 , 重写
特点 : 在不改变原有代码的前提下,而实现不同效果 , 多态针对的是对象
对象不同,调用相同的方法,实现了不同的效果,是多态.
""" """
# issubclass 判断是否是子父关系
res = issubclass(Army,ceshi)
print(res)
# isinstance 判断对象是否是该类型 [在一条继承链上即可]
res = isinstance(obj_army,ceshi)
print(res)
""" class ceshi():
pass class Soldier():
def attack(self):
pass def back(self):
pass # 陆军
class Army(Soldier):
def attack(self):
print("[陆军]你砍我 , 我砍你,一刀999级") def back(self):
print("[陆军]撒腿就跑,畏罪潜逃") # 海军
class Navy(Soldier):
def attack(self):
print("[海军]扔鱼叉,插死一个算一个") def back(self):
print("[海军]跳海喂鱼,畏罪潜逃") # 空军
class AirForce(Soldier):
def attack(self):
print("[空军]拿出二营长的意大利炮,射击") def back(self):
print("[空军]直接跳伞,落地成盒") # 创建陆军士兵
obj_army = Army()
# 创建海军士兵
obj_navy = Navy()
# 创建空军士兵
obj_air = AirForce() # 各就位准备
listvar = [obj_army,obj_navy,obj_air] # 将军请下令
strvar = """
(1) 全体出击
(2) 全体撤退
(3) 空军上,其他人迅速撤离
"""
sign = True
while sign:
# 打印显示的内容
print(strvar)
num = input("将军,请下令") # 按钮只有1,2,3 是字符串
if num in ["","",""]:
# 强转成数字
num = int(num) # 循环列表
for i in listvar:
if num == 1:
i.attack()
elif num == 2:
i.back()
elif num == 3:
# 判断该对象是AirForce创建的
if isinstance(i,AirForce):
i.attack()
else:
i.back()
# 如果字符串是q,则退出整个程序
elif num.upper() == "Q":
print("风太大了,我听不到~")
sign = False
break

类的多态 示例代码

day18

day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)的更多相关文章

  1. Python运维开发基础10-函数基础【转】

    一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...

  2. Python运维开发基础09-函数基础【转】

    上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...

  3. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  4. Python运维开发基础07-文件基础【转】

    一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...

  5. Python运维开发基础06-语法基础【转】

    上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...

  6. Python运维开发基础05-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...

  7. Python运维开发基础04-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...

  8. Python运维开发基础03-语法基础 【转】

    上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...

  9. Python运维开发基础02-语法基础【转】

    上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...

  10. Python运维开发基础01-语法基础【转】

    开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...

随机推荐

  1. python 处理form/data文件上传

    处理multipart/form-data 的java serverlet请求接口通过python实现 记住不要在头加:"Content-Type":"multipart ...

  2. NTP网络授时服务器部署及网络时钟同步设置说明

    NTP网络授时服务器部署及网络时钟同步设置说明 NTP网络授时服务器部署及网络时钟同步设置说明  本文由安徽京准科技提供@请勿转载. 一.前言 1.NTP简介 NTP是网络时间协议(Network T ...

  3. 6_4 破损的键盘(UVa11988)<链表>

    你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容 ...

  4. Linux下载安装

    博客及下载 https://www.cnblogs.com/nongzihong/p/10475753.html centos镜像 下载 https://blog.csdn.net/sinat_365 ...

  5. hadoop学习笔记(二):hdfs优点和缺点

    优点 其中的10k+,指的是每一个块必须>=1M 缺点 低延迟:是指hadoop处理数据都是以分钟为单位的,而不像storm那样的是以毫秒级为单位的. 高吞吐率:是指你分布式存储的文件块的大小必 ...

  6. 使用JavaScript获取样式的属性值

    1 . 在js中可以使用style属性来获取样式的属性值(只能获取内联样式的属性值) 语法格式为: HTML元素.style.样式属性; 2 .   在IE浏览器中,使用currentStyle来获取 ...

  7. SQL Server 作业的备份

    轉發:https://www.cnblogs.com/Amaranthus/archive/2012/06/25/2561569.html 作业备份,不是备份数据库,是备份作业. DECLARE @j ...

  8. Idea rest client 使用(全) 真香

    看了网上好多的 idea rest client 讲解,大多都只是讲了它如何如何好,都只是简单的测了一个 json 的接口而已,个人实践了一把,里面还是有挺多坑的,但不得不说,那个脚本化处理请求的功能 ...

  9. 【硬核教程】只需1秒—你也可以有自己的API文档

    Nothing is true. Everything is permitted. 写在前面 先聊聊为什么想到了要用Vuepress来代替原来写在Confluence上的文档. 大意是有个需要其他部门 ...

  10. spring web 测试用例

    spring web 测试有三种方式 1. 自己初始化 MockMvc 2.依赖@springbootTest 它会帮你生产 webTestClient ,只需自己注入即可. 3.启动的时候,不加载整 ...