day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)
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运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)的更多相关文章
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
随机推荐
- K8S集群搭建之软路由的安装
一.系统要求 ①镜像:win10 ②1C.4G.20G即可 ③仅主机模式(共享网卡上网) ④老毛桃PE ⑤ip为192.168.66网段(因为我设置的其他K8S节点也为该网段)---koolshare ...
- animation模块的使用
1.动画的实现-初探 import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncA ...
- plotly线上绘图和离线绘图的区别
1.线上绘图 import plotly import plotly.plotly as py import plotly.graph_objs as go plotly.tools.set_cred ...
- 一年读100本书---HHR,NZJ---19年最后4个月
那些自律到极致的人,都拥有了开挂的人生.生物钟,绝对一致之后,一切都会很高效. 19年最后一个季度的HHR计划:还剩下3个月的时间,主要搞定几件事情:创业(以太一堂,混沌大学),工作能力(推荐算法工程 ...
- 2016 Google code jam 大赛
二,RoundC import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- Travis CI Build Continuous Integration
什么是持续集成 持续集成(Continuous Integration)是经常合并小的代码更改的实践,而不是在开发周期结束时合并大的更改.目的是通过以较小的增量开发和测试来构建更健康的软件.这就是Tr ...
- Linux动态库路径配置
参考链接:https://blog.csdn.net/blade2001/article/details/32839937 为什么要关注动态库路径配置,是因为工作中遇到动态库依赖其他动态库,而其他动态 ...
- Laravel Vuejs 实战:开发知乎 (7)验证问题表单字段
上一节代码中已经实现 下面代码中的validate内部配置就是: public function store(Request $request) { // $data = $request->v ...
- C++中map的介绍用法以及Gym题目:Two Sequences
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字(key),每个关键字只能在map中出现一次,第二个可能称为该关键字的值(value))的数据 处理能力,由于这个特性,它完成有可能 ...
- dfs+枚举,flip游戏的拓展POJ2965
POJ 2965 The Pilots Brothers' refrigerator Description The game “The Pilots Brothers: fo ...