Basic
面向对象编程
- 命名方法:Pascal 首字母大写
定义属性:对象有什么性质
-
class UAV: def __init__(self,id,color): #构造函数 self.id = id self.color = color self.type = "Quadrotor"
-
类实例化
F1 = UAV(1,'red') #调用init创新新对象,将对应属性赋值 print(f"无人机的id为{F1.id},颜色是{F1.color},飞机模型为{F1.type}")
输出:
无人机的id为1,颜色是red,飞机模型为Quadrotor
定义方法:对象能做什么事情
-
class UAV: def __init__(self,id,color): #构造函数 self.id = id self.color = color def takeoff(self,height,duration): #类里定义的函数-->方法 print(f"{self.id}号无人机起飞!高度为{height},起飞时间为{duration}")
-
调用类方法
F1 = UAV(1,'red') F1.takeoff(2,2)
输出:
1号无人机起飞!高度为2,起飞时间为2
类继承:DRY原则-Don’t Repeat Yourself
-
class UAV: def __init__(self,id): self.id = id def takeoff(self,height,duration): print(f"{self.id}号无人机起飞!高度为{height},起飞时间为{duration}") class Helicopter(UAV): def __init__(self,id): super().__init__(id) #调用父类的构造函数,使其具有父类中定义的属性 self.rotor = 1 def takeoff(self,height,duration): print(f"{self.id}号直升机起飞!高度为{height},起飞时间为{duration}") class Quadrotor(UAV): def __init__(self,id): super().__init__(id) #调用父类的构造函数,使其具有父类中定义的属性 self.rotor = 4 def takeoff(self,height,duration): print(f"{self.id}号四旋翼起飞!高度为{height},起飞时间为{duration}")
-
调用
F1 = Quadrotor(1) F2 = Helicopter(2) F1.takeoff(2,2) F2.takeoff(4,2)
输出:
1号四旋翼起飞!高度为2,起飞时间为2
2号直升机起飞!高度为4,起飞时间为2
调用逻辑:先查找自己类(Quadrotor)里有没有takeoff方法,若没有,则使用父类中的takeoff方法(同名)
-
什么时候用继承?
“A是B”时,可以写成
classA(B)
文件
读取文件
-
f = open("./data.txt","r",encoding="utf-8") #相对路径,读取文件,编码方式为utf-8 print(f.read()) f.close
-
with open("./data.txt") as f: print(f.read) #无需单独调用close文件f来释放资源
-
读写的三种方式:
-
read:一次性读取文件中的所有内容(字符串)
f.read(10)
会读1-10字节的文件内容,之后会从11字节开始读 -
readline:读取文件的一行
line = f.readline() while line != "": print(line) line = f.readline() #读取下一行
-
readlines:读取文件所有行,按行组成列表
lines = f.readlines() for line in lines: print(line)
-
Advanced
assert
-
程序能够在我的假设条件(assert)下良好的运行,相当于一个if语句
-
当表达式为真时,正常执行;为假时,抛出异常错误
AssertionError:这里是异常,我们可以自己写报错的内容
def zero(s): a = int(s) assert a > 0,"a超出范围" #这句的意思:如果a确实大于0,程序正常往下运行 return a zero("-2") #但是如果a是小于0的,程序会抛出AssertionError错误,报错为参数内容“a超出范围”`