Python基础-day14
list
枚举
异常
异常处理
自定义异常
单例设计模式(23设计模式 数据结构 算法 操作系统原理 网络工程原理)
枚举类型
什么是枚举:我们可以一一列举的有限集合
月份:(1到12月) 四季:春夏秋冬 生肖:鸡狗猴兔
枚举类型 在python程序里不是基本的数据类型
from enum import Enum ,IntEnum ,unique
具体实现:
我们如果想搞一个自己的枚举类型 我们可以写一个继承自Enum或者IntEnum的一个类
from enum import Enum, IntEnum, unique
@unique
class Week(Enum):
MON = "周一"
TUS = "周二"
WEN = "周三"
THU = "周四"
FRI = "周五"
SAT = "周六"
SUN = "周天"
# 访问
res = Week.MON.value
print(res)
要求枚举类型的值都是整数类型或整数值的字符串 那么我们就继承IntEnum
示例如下
class HalfYear(IntEnum):
JAN = 1
FEB = 2
MAT = 3
API = 4
MAY = 5
JUN = "6"
print(HalfYear.JUN.value)
异常
程序里 一些不期而遇的 意想不到的问题 导致程序崩溃
常见的异常:
NameError: name 'a' is not defined
ValueError: invalid literal for int() with base 10: 'ss'
TypeError: must be str, not int
IndexError: list index out of range
SyntaxError: invalid syntax
AttributeError: 'dict' object has no attribute 'append'
ZeroDivisionError: division by zero
FileNotFoundError: [Errno 2] No such file or directory: 'hehe'
异常处理
try:
是我们想要捕获异常代码段(有可能出现问题的地方)
except ValueError as 变量名:
如果程序出现异常下边的代码将会被执行 如果程序没出错 那么下边的代码 不会被执行
print("错误", 变量名)
变量名里 包含了我们的错误信息
except可以写多个并且 只要有一个被捕获的类型满足条件 那么其他的except将不会被执行 示例如下
try:
# int("9o")
print(a)
except ValueError as e: 在python2里as可以使用,来替代 python3不可以
print("错误", e)
except NameError as e:
print("变量不存在", e)
except IndexError as e:
print("下标错误")
else:
当程序不出错的时候 会进入下边的代码
finally:
不管程序是否正常 最后都需要执行此处的代码
当我们无法确定到底会出什么异常 那么我们就使用Exception这个类(常见异常的基类)
自己手动抛出异常
raise 异常类型的类(提示)
raise Exception("字符串位数不正确")
自定义异常
当系统定义的异常类型 不够用的时候 我们可以写一个继承自Exception的一个类
class LengError(Exception):
def __init__(self, msg):
# super().__init__(msg)
self.msg = msg
def __str__(self):
return "[LengError]:详情:{}".format(self.msg)
使用
raise LengError("长度不够")
或者
a = "12"
try:
if len(a) != 3:
raise LengError("呵呵")
except LengError as e:
print(e,"___")
单例设计模式(23程序设计模式)
生活里:微信:在跟别人视频的时候 还可以发消息 朋友圈 也就是在微信的软件 多处操作的时候 那个用户 一直都是一个人 也就是你
皇上:太上皇不算 全国只有一个
程序里:
不管我们如何去实例化我们的对象 出来都是一个
单例的实现
装饰器来实现(重点)
def singlton(cls):
# count = 0
instance = None
def inner(*args, **kwargs):
nonlocal instance
# if instance == None:
# instance = cls(*args, **kwargs)
# return instance
# else:
# return instance
instance = instance if instance else cls(*args, **kwargs)
return instance
return inner
@singlton
class Pet:
def __init__(self,name):
self.name = name
def run(self):
print("runing")
a = Pet("a")
b = Pet("b")
# print(id(a), id(b))
print(a.name, b.name)
练习:
乾隆带和珅与纪晓岚 去东莞玩
皇帝类
单例模式
大臣类:
不使用单例
地点类
名字
from 单例练习.decorator import singlton
@singlton
class Emperor:
def __init__(self, name):
self.name = name
def play(self, minister1, minister2, place):
my_str = "{}带{}与{},去{}玩~~~".format(
self.name,
minister1.name,
minister2.name,
place.name
)
print(my_str)
class Minister:
def __init__(self, name):
self.name = name
class Place:
def __init__(self, name):
self.name = name