反射方法
hasattr(obj,name)
判断该对象中是否包含名称name的属性
setattr(obj,name,value)
给名称为name的属性设置value值
getattr(obj,name)
获取名称为name的属性的具体数据
delattr(obj,name)
删除名称为name的属性
设计模式
设计模式没有其固定格式,只是代码设计经验的组总结被多数人知晓
说到设计模式,就不得不提软件开发的六大原则:
1、开闭原则
2、里氏替换原则
3、依赖倒置原则
4、接口隔离原则
5、迪米特法则
6、单一职责
常见的23种设计模式:
创建型模式:
单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式
结构型模式:
适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式、外观模式
行为型模式:
观察者模式、访问者模式、中介者模式、解释器模式、迭代器模式、状态模式、命令模式、策略模式、备忘录模式、职责模式、模块方法模式
在这里只做单例模式和工厂模式的介绍
单例模式
为保证数据的一致性,在任何时候获取的都是同一个对象,这时使用单例模式
class MyData:
_flag = False # 定义了一个标志位
def __new__(cls, *args, **kwargs):
if not cls._flag:
# 判断是否已有对象
cls._flag = object.__new__(cls)
return cls._flag
工厂模式
为了不对用户暴露创建逻辑,通过一个接口来创建不同的对象,我们会使用工厂模式
例:有一个车辆制造厂,可以制造摩托车也可以制造汽车,只需要去制造厂中提车,不用知道车辆是怎么制造的
class Moto:
def __init__(self, name):
self.name = name
def fly(self):
print(f"骑着{self.name}牌摩托向上飞")
class Car:
def __init__(self,name):
self.name = name
def fly(self):
print(f"开着{self.name}牌汽车飞")
class Choice:
def chioce(self, key, name):
if key == 1:
return Moto(name)
else:
return Car(name)
k = Choice()
m = k.choice(1, "宝马")
m.fly()
文件操作
打开文件
open()方法
open(file,mode=‘r’,encoding=None,buffering=-1)
file:需要操作的文件路径,可以是相对路径,也可以是绝对路径
mode:文件的操作模式 默认为 r
r:只读
w:写
若文件不存在则会自动创建,
如果文件已存在,并且有内容,将会将原内容覆盖掉
a:追加写
如果文件不存在会自动创建
如果文件已存在,并且有内容,不会覆盖原内容,跟在原内容后面写
br:以只读的形式打开二进制文件
bw:以二进制的形式写入到文件中
ad:二进制文件的追加写
encoding:指定哪一种编码格式去操作文件
buffering:buffering的值被设为-1,则为系统默认缓存,0不会寄存,1表明寄存区的大小
读取操作
read()读取文件所有内容
readline() 读取一行,并且自带换行功能,每一行末尾会读到\n
readlines() 一次性以行的形式读取文件的所有内容返回的是一个列表,需要去遍历读取
写入
write(内容)
writelines(list) 将多行内容一次性写入文件
with语法
将文件的操作步骤进行优化处理,不需要手动关闭
格式:
with open() as 别名:
操作文件的代码