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开发进阶 ...
随机推荐
- SpringAOP学习之5种通知
一.Spring的AOP分为以下5种类型通知 ①前置通知(Before):在连接点执行前执行该通知 ②正常返回通知(AfterReturning):在连接点正常执行完后执行该通知,若目标方法执行异常则 ...
- composer install报错intervention/image 2.4.x-dev requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
(1)问题:intervention/image 2.4.x-dev requires ext-fileinfo * -> the requested PHP extension fileinf ...
- Postman如何测试Webservice接口?
一般情况下使用soapui工具测试ws接口,那么能不能使用postman测试呢?当然可以,往下看. 1. 首先请求类型为post 填写上ws地址 ,url地址后不追加?wsdl 2. 设置请求头 he ...
- jvm01
hotspot:是jvm的核心组件(或者名称),jvm 需要对class文件进行编译成cpu能直接运行的代码.hotspot会对频繁使用的class代码进行缓存,不会再次编译,类似于缓存 client ...
- Java进阶学习(1)之类与对象(上)
package com.study; //自动售卖机 public class vmachine { private int price = 80; private int balance; priv ...
- php 用mysqli的json_encode()转换出来 全是对象的问题
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/9/6 0006 * Time: 15:33 */ //查 ...
- Net Core解决ZipFile解压中文出现乱码
一.在main方法中添加 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 二.解压添加 //sourceArchiveFi ...
- cmd创建用户开启3389命令
1.创建用户chen Net user chen 1234566 /add 2.将用户chen添加到管理员组 net localgroup Administrators chen /add 3.开启3 ...
- python opencv:像素操作
图片的像素 像素:组成图片的单位 RGB:颜色由 RGB三种颜色组成 颜色深度:对于8bit的颜色深度来说,它可以表示的颜色范围是 0 ~ 255,对于RGB图片来说,8位颜色深度可以表示 (2^8) ...
- PyQt5四大布局方式
1.绝对布局方式'''绝对布局方式,通过move的XY坐标方式来控制控件的位置'''from PyQt5.QtWidgets import *import sys,math class absolut ...