单继承:
#1.师傅类,属性和方法
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
#2.定义徒弟类,继承师傅类
class Prentice(Master):
pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
多继承:
#1.师傅类,属性和方法
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
#为了验证多继承,添加School父类
class School(object):
def __init__(self):
self.kongfu = '[黑马煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
#2.定义徒弟类,继承师傅类和学校类
class Prentice(Master,School):
pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
#如果一个类继承多个属性和方法,那么他优先继承第一个父类的同名属性和方法
super函数的作用:在子类中调用父类的方法
私有属性和私有方法的定义:self.__
它们不能继承
多态性:
#需求:警务人员和警犬一起工作,警犬有:追击敌人、追查毒品
#1.定义父类,提供公共方法:警犬、人
class Dog(object):
def work(self):
pass
#2.定义子类,子类重写父类方法,定义2个类表示不同的警犬
class ArmyDog(Dog):
def work(self):
print('追击敌人')
class DrugDog(Dog):
def work(self):
print('追查毒品')
#定义人类
class Person(object):
def work_with_dog(self, dog):
dog.work()
#3.创建对象,调用不同的功能,传入不同的对象,观察执行结果
ad = ArmyDog()
dd = DrugDog()
daqiu = Person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)
当传入不同的对象时输出值不同
异常:
捕获单个指定异常类型时:若异常的产生与except后的错误相同时:
try:
print(num)
except NameError:
print('有错误')
调试结果:
可以正常打印。
若异常的产生与except后的错误不同时:会报错
try:
#print(num)
print(1/0)
except NameError:
print('有错误')
报的错误是本身try下面的语法错误
异常的传递:
#需求1: 尝试只读打开test.txt 文件存在读取内容,不存在提示用户
#需求2: 读取内容,循环读取,当无内容的时候退出循环,如果用户意外终止,提示用户已经被意外终止
import time
try:
f = open('test.txt')
#尝试循环读取内容
try:
while True:
con = f.readline()
# 如果读取完成退出循环
if len(con) == 0:
break
time.sleep(3)
print(con)
except:
#在命令提示符中按ctrl+c结束中止
print('程序被意外终止')
except:
print('该文件不存在')
异常可以进行嵌套,先执行外层的try再执行里面的try
自定义异常:
#1.自定义异常类,继承Exception, 魔法方法有init和str(设置异常描述信息)
class ShortInputError(Exception):
def __init__(self, length, min_len):
#用户输入的密码长度
self.length = length
self.min_len = min_len
#设置异常描述信息
def __str__(self):
return f'您输入的密码长度是{self.length},密码不能少于{self.min_len}'
def main():
#2.抛出异常:尝试执行,用户输入密码,如果长度小于3,抛出异常
try:
password = input('请输入密码:')
if len(password) < 3:
#抛出异常类创建的对象
raise ShortInputError(len(password), 3)
#3.捕获该异常
except Exception as result:
print(result)
else:
print('没有异常,密码输入完成')
main()
#3.捕获该异常
调试结果:
模块的使用方法:
#需求:math模块下sqrt()开平方计算
'''
1.导入模块
2.测试是否导入成功:调用该模块内的sqrt功能
'''
#方法一:import 模块名; 模块名.功能
#import math
#方法二:from 模块名
#from math import sqrt
#方法三:from 模块名 import *;功能调用(不需要书写模块名.功能)
#from math import *
all列表:如果一个文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。
导入包:
#方法一
'''
1.导入
import 包名.模块名
2.调用功能
包名.模块名.功能()
'''
#导入mypackage包下的模块1,使用这个模块内的info_print1函数
import mypackage.my_module1
mypackage.my_module1.info_print1()
#方法二:注意设置__init__.py文件里面的all列表,添加的是允许导入的模块
#必须在__init__.py文件中添加__all__ = []
'''
from 包名 import *
模块名.目标
'''
from mypackage import *
my_module1.info_print1()
总结:
导入模块方法 | 导入包 |
import 模块名 | import 包名.模块名 |
from 模块名 import 目标 | from 包名 import * |
from 模块名 import * | |