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. nodejs的req取参req.body,req.params,req.query

    1/req.query: Get:/domo?name=ximiximi&blog=https://home.cnblogs.com/u/ximiximi-blog/ app.get('/do ...

  2. 本地mongodb数据库导出到远程数据库中

    把本地Mongodb中的数据导入(批量插入)到服务器的数据库中 1.导出数据: mongoexport -d admin -c users -o outdatafile.dat 选项解释: -d 指明 ...

  3. P1030 求先序排列 (一个非常棒的写法)

    理论正确就是真正的正确,误... 就是找嘛,找到每一个对应字符,然后对应的左右子树的区间,然后就可以了. #include <bits/stdc++.h> using namespace ...

  4. JQuery checkbox多选框组选中提交,当选择某(无)一项,其他项禁止选中

    在项目中难免会遇到一些表单的提交,尤其是多选框中,当用户选择了某一项时,禁止其他项的选择.所以为了避免这样的冲突,所以我们前端就得控制一下了,下面就来个简单demo,记录一下,有需要的伙伴可以拿去耍耍 ...

  5. Building Ethereum private chain on CentOS

    golang安装 yum install golang 查看版本 go version 安装以太坊源代码 Building Geth (command line client) Clone the r ...

  6. 【Python 多进程】

    " 一.模块介绍 multiprocess模快 仔细说来,multiprocess不是一个模块,而是python中的一个操作.管理进程的包,之所以叫multi是取自multiple的多功能的 ...

  7. C/C++中size_t潜在的问题

    在C++中,利用数组下标访问数组元素时,常常将下标类型定义为size_t类型,因为正常来说,数组的下标就是size_t类型.例如这样: for (size_t i = 0; i < contai ...

  8. 传奇定时器OnTimer功能详解(泡点、时间触发、任务活动)

    传奇定时器OnTimer功能详解(泡点.时间触发.任务活动) 定时器功能,是传奇服务端中非常常见的一种功能,常见如:泡点脚本.赌博脚本,任务活动指定时间刷怪,时间触发一些都需要用到OnTimer功能, ...

  9. MySQL的多表查询学习笔记

    一.案例准备 create table dept( id int primary key auto_increment, name ) ); insert into dept values(null, ...

  10. 树状数组(fenwick tree)

    树状数组又称芬威克树,概念上是树状,实际上是使用数组实现的,表现为一种隐式数据结构,balabala...详情请见:https://en.wikipedia.org/wiki/Fenwick_tree ...