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开发进阶 ...
随机推荐
- RS422接口与RS485接口
RS422具体接线参考网站 RS485接口 RS485设备为半双工设备,RS485收发器信号相关引脚包括控制引脚.485A.485B,其中控制引脚的高低电平决定当前处于接收模式还是发送模式. RS48 ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy (unordered_map+并查集)
这题单用map过不了,太慢了,所以改用unordered_map,对于前面删除的点,把它的父亲改成,后面一位数的父亲,初始化的时候,map里是零,说明它的父亲就是它本身,最后输出答案的时候,输出每一位 ...
- wordpress 不用插件添加友情链接
哎,也不知道为啥,网上说的那个link manager这个插件死活找不到啊, 找了一个类似的,但是不是,这么多的英文看了好几遍才发现不是 然后从大神哪里找到一个好方法 在你用的那个主题的functio ...
- python中的坎坷之函数、集合
函数 作用:实现一个功能,函数理解成一个工具,遇到问题把这个工具拿来用 优点:函数更方便,复用,可以在多个场景下用 1.带参数的函数 name='lzs-nice' nane.split('-') # ...
- PTA喊山
喊山 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族 ...
- oracle 多表查询,请教个问题
首先,是有一个合同表,对应数据库表 lg_bill_of_lading_detail 简称 bold 有一个用户表 EMT_USER 简称 e 合同审批 后,合同表里 会有一个审核人AUDI ...
- 【代码学习】PYTHON字符串的常见操作
一.字符串运算符 下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python": 操作符 描述 实例 + 字符串连接 >>>a ...
- java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...
- java中关于类和对象的一些思考
就这个问题而言 第一种和第二种定义的变量并不是一种形式 前者我们称为原始数据变量 后者我们称为对象变量 这两种变量的创建方式,定义方式,使用方式都有着很多不同 需要引起注意. 在java中,有着基本的 ...
- 杭电2504 又见GCD
又见GCD Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...