2018-07-07 第一次写博客-python
2018-07-08: 4-15 99乘法表
#!/usr/bin/python #coding=utf-8 i = 1 while i <= 9: j = 1 while j <= i: print("%d*%d=%d"%(j,i,j*i)), j += 1 print("") i += 14-16 石头剪刀布
#!/usr/bin/python #coding=utf-8 import random player = input("请输入 0剪刀 1石头 2 布") computer = random.randint(0,2) if (player == 0 and computer ==2) or (player == 1 and computer == 0) or (player == 2 and computer == 1): print("sucess") elif (player == 0 and computer == 0) or (player == 1 and computer == 1) or (player == 0 and computer == 0): print("equal") else: print("fail")4-17 for循环
#!/usr/bin/python #coding=utf-8 name = "tangli" for temp in name: print(temp)4-18 break while里面用if
打印1-100里面的偶数 #!/usr/bin/python #coding=utf-8 i = 1 while i <= 100: if i % 2 == 0: print(i) i += 1 打印20个偶数 #!/usr/bin/python #coding=utf-8 i = 1 j = 1 while i <= 100: if i % 2 == 0: j += 1 if j == 20: break; print(i) i += 15-01 break continue
打印除了第20个的偶数值 #!/usr/bin/python #coding=utf-8 i = 1 j = 1 while i <= 100: if i % 2 == 0: j += 1 if j == 20: continue; print(i) i += 15-02 while嵌套中的break作用范围
#!/usr/bin/python #coding=utf-8 i = 1 while i <= 5: j = 1 while j <= i: print("*"), j += 1 break i += 1 print("") break5-03 字符串在内存中的存储方式 字符串存储时 “100” 占用4字节
5-04 字符串类型的转换
#!/usr/bin/python #coding=utf-8 num = "100" length = len(num) print(length)5-05 输入、输出字符串 input() print("%s"%(a+b)) 5-06 组成字符串的2种方式 a = “lao” b = “zhao” c = “wang” d = a + b
e = “=%s=”%(a + b) 5-07 字符串中的下标
#!/usr/bin/python #coding=utf-8 name = "abcdefghi" print(name[0]) print(name[1]) name[len(name)-1]5-08 切片、字符串逆序 从字符串中取一片下来
name = "abcdefghijk" name[2:5] name[2:] 隔一个输出 name[2:-1:2]5-09 列表的引入、定义和C语言中的数组不同的点
names = ["laowang", "laoliu", "laoliu", 123, 12.4, 'w']5-10 列表的增删改查——存储相同信息
names = ["laoliu", "wang", 123.4, 111] names.append("nihao") 添加:位置 names.insert(0,"bajie") 增加:两个列表合并 names1 = ["zhao", "qian", "sun"] names2 = ["li", "zhou", "wu"] names3 = names1 + names2 names.extend(names3) names = ["1", "2", "3", "1", "1"] 删除最后一项 names.pop() 从左到右删除一个 names.remove("1") 下标是谁就删除谁 del names[2] 改 name[0] = "3" 查 if "laozhao" in names print () elif "laozhao" not in names print ()5-11 名字管理系统
#!/usr/bin/python #coding=utf-8 print ("="*50) print ("名字管理系统") print ("1: 添加一个新名字") print ("2: 删除一个名字") print ("3: 修改一个名字") print ("4: 查询一个名字") print ("5: 推出系统") print ("="*50) #2 获取用户的选择 num = int(input("请输入功能序号:")) names = [] #3 根据用户的选择,执行相应功能 while True: if num == 1: new_name = raw_input("请输入名字:") names.append(new_name) print (names) elif num == 2: pass elif num == 3: pass elif num == 4: find_name = raw_input ("请输入要查询的名字") if find_name in names: print ("找到了%s"%find_name) else: print ("查无此人!") elif num == 5: break else: print ("输入有误,请重新输入!")01 编码报错
请输入功能序号:1 请输入名字:laowang Traceback (most recent call last): File "./05-11.py", line 22, in <module> new_name = input("请输入名字:") File "<string>", line 1, in <module> NameError: name 'laowang' is not defined 解决: 1 输入字符串时加上""或',如: "gordon" 2 代码中使用raw_input代替 input 如:new_name = raw_input("请输入名字:") 列表的缺点: 修改时容易出错 如: sun = ["banz", "shanxi", 27] print("%s %d %s"%(sun[0], sun[2], sun[1]))5-12 字典的引出、字典的定义——描述很多信息
当描述很多信息时,用字典: infor = {"name": "banz", "addres": "shanxi", "age":27} print("%s %s %d"%(infor["name"], infor["addres"], infor["age"]))5-13 字典的增删改查
{'age': 27, 'name': 'sun', 'addres': 'jingyelu'} 增: infor = {"name": "sun"} infor["age"] = 27 infor["addres"] = "jingyelu" 删: del infor["age"] 改: infor["name"] = "gordon" 查:查询时如果不存在不会让程序崩溃 strs = infor.get("age1")5-14 名片管理系统
一个字典保存一个人的信息 一个班的信息,用列表嵌套字典 #1 打印功能提示 print ("="*50) print ("1 增") print ("2 删") print ("3 改") print ("4 查") print ("5 退出") print ("="*50) #2 获取用户的输入 num = int(input("请输入操作序号:")) #3 根据用户的数据执行相应的功能 stu_infor = [] while True: if num == 1: name = raw_input("请输入新的名字:") age = raw_input("请输入新的年龄:") #定义一个新的字典,来存储新的名片 new_infor = {} new_infor["name"] = name new_infor["age"] = age print (new_infor) stu_infor.append(new_infor) elif num == 2: pass elif num == 3: pass elif num == 4: find_name = raw_input("请输入查询的名字:") #默认没找到 **find_flag = 0** #含有find_name的字典存在 #遍历列表,找到含有此find_name的字典 for find_name_dir in stu_infor: print (find_name_dir) if find_name == find_name_dir["name"]: print ("查询的名字在列表中") find_flag = 1 break if find_flag == 0: print ("不在列表") elif num == 5: break else: pass6-01 while、for循环变量列表
#!/usr/bin/python #coding=utf-8 nums = [1,2,3,4,5,6] num_length = len(nums) i = 0 while i < num_length: print(nums[i]) i += 1 for num in nums: print(num)6-02 for-else 应用
如果列表是空的,不会影响else代码 nums = [1, 2, 3, 4, 5, 6] for循环执行完后,else才能执行,如果for循环有break,else不会执行 for num in nums: print(num) else: print("====")6-03 列表的append-extend
extend: a = [1, 2, 3] b = [4, 5] b只能是一个列表,不能是字符 a.extend(b) append:把b当做整体添加到a a = [1, 2, 3] b = [4, 5] a.append(b) 结果如:[1, 2, 3, 4, [4, 5]]6-04 列表的append操作注意点
a = [1, 2, 3] b = [4, 5] a.append(b) print(a) **02-编码错误:** a = a.append(b)6-05 元组 tuple
nums2 = (11, 22, 33) print(type(nums2)) 三种数据类型区别: 列表:可读写文件 字典: 元组:不能改、增、删、(只能查)只读文件 **编码报错:** 如: nums2 = (11, 22, 33) nums2[0] = 00 Traceback (most recent call last): File "./06-05.py", line 11, in <module> nums2[0] = 00 TypeError: 'tuple' object does not support item assignment6-06 字典的常见操作、遍历
len: infor = {"name":"laowang", "age":18} len(infor) 2 键值对的个数 keys:结果是个列表 infor.keys() ['name', 'age'] values: infor.values() ['laowang', '18'] 遍历:拿到键 for temp in infor.keys(): for temp in infor.items(): print("key=%s, value=%s"%(temp[0], temp[1])) items()遍历后得到元组 ('age', 18) ('name', 'laowang') 元组: a = (11, 22) b = a c, d = a 所以会拆包:c = 11, d = 226-07 定义函数
def print_fin():6-08 定义、调用函数
#!/usr/bin/python #coding=utf-8 定义函数 def print_menu(): print("="*50) print(" 名片管理系统") print("1: xxx") print("2: xxx") print("="*50) 调用函数 print_menu()6-09 多个函数的定义、调用
def print_rec(): print("rec") def print_roun(): print("roun") print_rec() print_roun()6-10 带有参数的函数
def sum_2_nums(a, b): result = a + b print("%d + %d = %d"%(a, b, result)) num1 = int(input("请输入第一个数字:")) num2 = int(input("请输入第二个数字:")) #调用函数 sum_2_nums(num1, num2)6-11 return的作用-获取温度
def get_temp(): tem = 22 print("当前的室温:%d"%tem) return tem def get_temp_hua(tem): tem_hua = tem +175 print("当前的华:%d"%tem_hua) shi_tem = get_temp() get_temp_hua(shi_tem)6-12 函数return返回-强调
6-13 函数中的多个return
def test(): a = 11 b = 22 c = 33 d = [a, b, c] return d d = test() print(d)6-14 4种函数
def 函数名(): def 函数名(参数): def 函数名(参数): return def 函数名(): return6-15 函数嵌套调用1
6-16 函数嵌套调用2
6-17 用百度百科理解函数的嵌套调用
6-18 函数的嵌套调用-1
def print_line(): print("-"*50) def print_5_lines(): i = 0 while i < 5: print_line() i += 1 print_5_lines()6-19 函数的嵌套调用-2-要求
6-20 函数的嵌套调用-2-代码
def print_line(nums): print("-"*nums) def print_5_lines(nums): i = 0 while i < 5: print_line(nums) i += 1 num = int(input("每行输入:")) print_5_lines(num)7-01 局部变量
7-02 全局变量
7-03 局部变量、全局变量的区别
如果一个变量已经在全局变量的位置定义,此时还想在函数中修改,那么仅仅wendu = x,不够,此时wendu这个变量是一个局部变量,仅仅是和全局变量相同,如果想要调用全局变量需要在局部变量加 global wendu = 0 def get_wendu(): global wendu wendu = 33 def print_wendu(): print("温度:%d"%wendu) get_wendu() print_wendu()7-04 全局变量定义的位置
a = 100 def test(): print("a = %d"%a) print("b = %d"%b) print("c = %d"%c) b = 200 test() #全部变量必须在调用之前,之后会报错 c = 3007-05 全局变量和局部变量名字相同
如果全局变量和局部变量相同,默认使用局部变量,没有局部变量时使用全局变量
7-06 全局变量命名-建议 定义全局变量时 建议 g_a = 100 7-07 名片管理系统-函数版
7-08 列表、字典、当做全局变量
7-09 函数返回多个值-强调
7-10 缺省参数的介绍
7-11 缺省参数
默认传入值,缺省参数只能放在最后面 def test(a, b=22): result = a + b print("result = %d"%result) test(11) test(22) 传入值时用自己的 test(11,44) 2缺省参数 def test(a,b=22,c=33): print(a) print(b) print(c) test(11,c=44)命名参数 结果:11 22 447-12 不定长参数
def sum_2_nums(a,b,*args): print(a) print(b) print(args) sum_2_nums(11,22,33,44,55,66) 结果: 11 22 (33, 44, 55, 66) 元组7-13 不定长参数2
def test(a,b,c=33,*args): print(a) print(b) print(c) print(args) test(1,2,3,4,5) 1 2 3 (4, 5) def test(a,b,c=33,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) test(1,2,3,4,5) 1 2 3 (4, 5) {} 带名字存在字典中,不带名字存在元组中 def test(a,b,c=33,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) test(1,2,3,task=4,done=5) 结果: 1 2 3 () {'task': 4, 'done': 5}7-14 不定长参数3
def test1(a,b,*args): result=a+b for num in args: result+=num print("%d"%result) test1(11,22,33,44,55)7-15 拆包、元组、字典
def test(a,b,c=33,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) #拆包 A = (11,22,33,44) B = {"name":"laowang", "age":19} test(11,22,33,A,B) 11 22 33 ((11, 22, 33, 44), {'age': 19, 'name': 'laowang'}) {} 拆包: test(111,222,333,*A,**B) 111 222 333 (11, 22, 33, 44) {'age': 19, 'name': 'laowang'} 元组: *A 字典: **B7-16 引用
a = 100 b = a print(type(a)) print(type(b)) print(id(a)) print(id(b)) <type 'int'> <type 'int'> 17405856 17405856 把a保存的地址,给了b7-17 引用-注意点 自动回收垃圾 7-18 不可变、可变类型
不可变类型: 数字 字符串 元组 a = "world" a[0]='H' 错误: Traceback (most recent call last): File "./07-18.py", line 8, in <module> a[0]='H' TypeError: 'str' object does not support item assignment 可变类型:不能当key值 列表 字典7-19 递归
ef getNums(num): num*getNums(num-1) getNums(4)8-01 匿名函数以及操作-1
lambda 参数:式子 变量 = lambda x,y:x+y func = lambda x,y:x+y result = func(11,22) print(result)8-02 匿名函数以及操作-2
stus = [{"name":"laowang", "age":20},{"name":"laozhao", "age":21},{"name":"laoliu", "age":22}] stus.sort(key=lambda x:x["age"]) print(stus) [{'age': 20, 'name': 'laowang'}, {'age': 21, 'name': 'laozhao'}, {'age': 22, 'name': 'laoliu'}]8-03 匿名函数的应用-1
def test(a,b,func): result = func(a,b) print(result) test(11,22,lambda x,y:x+y)8-04 匿名函数的应用-2
def test(a,b,func): result = func(a,b) print(result) func_new = input("请输入一个匿名函数:") func_new = eval(func_new) test(11,22,func_new) 报错: Traceback (most recent call last): File "./8-04.py", line 10, in <module> func_new = eval(func_new) TypeError: eval() arg 1 must be a string or code object8-05 知识点补充-1
a = 100 def test(num): num+=num print(num) test(a) print(a) 200 100 交换: a = 4 b = 5 1 c = 0 c = a a = b b = c 2 a = a + b b = a - b a = a - b 3 a,b = b,a8-06 知识点补充-2
8-07 字符串常见操作
**find myStr = "hello world" num = myStr.find("or") print(num) **index myStr.index("world") **rfind 右边 myStr.rfind("") **rindex 右边 **count **replace **split **capitalize 首字母大写 **title 把每个单词第一个字母大写 **startswith **endswith **lower 全部转化为小写 **upper 全部转化为大写 **ljust **rjust **center8-08 文件介绍
8-09 文件操作流程,打开方式
f = open("test.txt", "w") f.close()8-10 文件的读写
f = open("haha.txt", "w") f.write("haha") f.close() f = open("haha.txt", "r") f.read(1) print(f.read(1))8-11 文件的读写简单应用
写: f = open("heihei.txt", "w") f.write("nihao nubia") f.close() 读: f = open("heihei.txt", "r") content = f.read() print(content) f.close()8-12 文件备份的流程
1 获取要复制的文件名 2 打开这个文件("r") 3 创建一个文件 xxx[复件].txt 4 从源文件中读取数据 5 将读取的数据写入新文件中 6 关闭2个文件8-13 文件备份的代码讲解
#1 获取要复制的文件名 old_file_name = raw_input("请输入要复制的文件名(需要后缀名):") #2 打开这个文件("r") f_read = open(old_file_name, "r") #3 创建一个文件 xxx[复件].txt f_write = open("xxx.txt", "w") #4 从源文件中读取数据 content = f_read.read() #5 将读取的数据写入新文件中 f_write.write(content) #6 关闭2个文件 f_read.close() f_write.close() 执行报错: Traceback (most recent call last): File "./8-13.py", line 5, in <module> old_file_name = input("请输入要复制的文件名(需要后缀名):") File "<string>", line 1, in <module> NameError: name 'haha' is not defined 错误: old_file_name = input("请输入要复制的文件名(需要后缀名):") 正确: old_file_name = raw_input("请输入要复制的文件名(需要后缀名):") 复制文件2: #1 获取要复制的文件名 old_file_name = raw_input("请输入要复制的文件名(需要后缀名):") #2 打开这个文件("r") f_read = open(old_file_name, "r") #3 创建一个文件 xxx[复件].txt position = old_file_name.rfind(".") new_file_name = old_file_name[0:position] + "[复件]" + old_file_name[position:] f_write = open(new_file_name, "w") #4 从源文件中读取数据 content = f_read.read() #5 将读取的数据写入新文件中 f_write.write(content) #6 关闭2个文件 f_read.close() f_write.close()8-14 读取文件的另外2种方式以及注意点
f.readlines() 返回列表 f.readline() 返回字符串 f.read(1) 返回字节 分段复制文件: while True: content = f_read.read(1024) if len(content) == 0 break f_write.write(content)8-15 文件的定位读写
f = open("haha.txt", "r") tell = f.tell() print(tell) 偏移: f.seek(2,0) myStr = f.read(1) print("读取的数据是:", myStr)8-16 使用程序完成对文件、文件夹的操作
1 文件重命名: import os os.rename("毕业论文.txt", "毕业论文-最终版.txt") 2 删除文件: os.remove("毕业论文.txt") 3 创建文件夹: os.mkdir("张三") 4 获取当前目录: os.getcwd() 5 改变默认目录: os.chdir("../") 6 获取目录列表: os.listdir("./") 7 删除文件夹 os.rmdir("张三")8-17 批量文件重命名的流程
8-18 批量文件重命名的代码讲解
import os #1. 请获取一个要重命名的文件夹的名字 folder_name = raw_input("请输入要重命名的文件夹:") #2. 获取那个文件夹中所有的文件名字 file_names = os.listdir(folder_name) #3. 对获取的名字进行重命名即可 for name in file_names: print(name) os.rename(old_name, new_name)9-01 面向对象、面向过程区别
9-02 面向对象
9-03 类和对象的关系
9-04 类和对象的区分、类的3个组成部分
类的名称:类名 类的属性:一组数据 类的方法:允许对进行操作的方法9-05 类的抽象
9-06 定义一个类
class 类名: #属性 #方法 def xx(): pass class Cat: def eat(self): print("eat fish") def drink(self): print("..")9-07 创建对象
tom = Cat()9-08 调用对象的方法
tom.eat() tom.drink()9-09 给对象添加属性
class Cat: #属性 def introduce(self): print("%s的年龄是:%d"%(tom.name, tom.age)) tom = Cat() tom.name = "taomo" tom.age = 40 tom.introduce()9-10 创建多个对象
tom = Cat() lanmao = Cat()9-11 self
原: def introduce(self): print("%s的年龄是:%d"%(tom.name, tom.age)) 现: def introduce(self): print("%s的年龄是:%d"%(self.name, self.age))9-12 self的注意点
9-13 —init—方法
#初始化对象 def __init__(self): print("__init__")9-14 调用—init—方法的流程
def __init__(self, new_name, new_age): self.name = new_name self.age = new_age tom = Cat("tom", 28)9-15 调用—init—方法
def __str__(self): return "%s的年龄是:%d"%(self.name, self.age) print(tom) haha tom的年龄是:289-16 全局变量、函数和属性、方法的联系和区别
9-17 应用:烤地瓜
#!/usr/bin/python #coding=utf-8 class SweetPotato: def __init__(self): self.cookedString = "生的" self.cooklevel = 0 def __str__(self): return "地瓜的状态:%s(%d)"%(self.cookedString, self.cooklevel) def cook(self, cooked_time): if cooked_time >= 0 and cooked_time < 3: self.cookedString = "%0生的" elif cooked_time >= 3 and cooked_time < 5: self.cookedString = "P生的" elif cooked_time >= 5 and cooked_time < 8: self.cookedString = "0" elif cooked_time >= 8: self.cookedString = ">100%" self.cooklevel = cooked_time di_gua = SweetPotato() print(di_gua) di_gua.cook(1) print(di_gua) 替换: %s///g 12,19s/cooked_time/self.cooked_level/ 新需求: #!/usr/bin/python #coding=utf-8 class SweetPotato: def __init__(self): self.cookedString = "生的" self.cooklevel = 0 self.condiments = [] def __str__(self): return "地瓜的状态:%s(%d),添加的佐料有:%s"%(self.cookedString, self.cooklevel, str(self.condiments)) def cook(self, cooked_time): self.cooklevel += cooked_time if self.cooklevel >= 0 and self.cooklevel < 3: self.cookedString = "%0生的" elif self.cooklevel >= 3 and self.cooklevel < 5: self.cookedString = "P生的" elif self.cooklevel >= 5 and self.cooklevel < 8: self.cookedString = "0" elif self.cooklevel >= 8: self.cookedString = ">100%" def addCondiments(self, item): self.condiments.append(item) di_gua = SweetPotato() print(di_gua) di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) di_gua.addCondiments("大蒜") di_gua.cook(1) print(di_gua) di_gua.cook(1) print(di_gua) 问题: 打印中文在控制台不对 地瓜的状态:P生的(4),添加的佐料有:['\xe5\xa4\xa7\xe8\x92\x9c'] 未解决9-18 应用:存放家具
#!/usr/bin/python #coding=utf-8 class Home: def __init__(self, new_area, new_info, new_addr): self.area = new_area self.info = new_info self.addr = new_addr self.left_area = new_area self.contain_items = [] def __str__(self): msg = "总面积:%d,可用面积:%d, 户型:%s, 地址:%s"%(self.area, self.left_area, self.info, self.addr) msg += ", 家具有:%s"%(str(self.contain_items)) return msg def add_tools(self, item): self.left_area -= item.area self.contain_items.append(item.name) class Bed: def __init__(self, new_name, new_area): self.name = new_name self.area = new_area def __str__(self): return "%s 占用面积:%d"%(self.name, self.area) ho = Home(140, "三室两厅", "西安市,高新区") print(ho) bd = Bed("ximengsi", 4) print(bd) ho.add_tools(bd) print(ho) 定义属性获取的方法,不让直接获取属性 def add_tools(self, item): self.left_area -= item.get_area() self.contain_items.append(item.get_name()) def get_area(self): return self.area def get_name(self): return self.name10-01 隐藏属性
self.__age = 0**10-02 私有方法 **
def __test1(self): pass class Dog: def __send_msg(self): print("____已发送") def send_msg(self, new_money): if new_money > 10000: self.__send_msg() else: print("余额不足") dog = Dog() dog.send_msg(100000)**10-03 ——del——方法 **
class Dog: def __del__(self): print("died") dog1 = Dog() dog2 = dog1 del dog1 print("game over!") 当没有用时,自动调用__del__**10-04 测量对象的引用个数 **
import sys class T: pass t = T() print(sys.getrefcount(t)) 结果:2**10-05 继承 **
class Animal: def eat(self): print("animal: eat") def drink(self): print("animal: drink") def sleep(self): print("animal: sleep") class Dog(Animal): def bark(self): print("dog:wang") a = Animal() a.eat() d = Dog() d.bark() d.eat()**10-06 子类继承父类、父类的父类 **
class Animal: def eat(self): print("animal: eat") class Dog(Animal): def bark(self): print("dog: bark") class Xiaotq(Dog): def fly(self): print("fly") xiaotq = Xiaotq() xiaotq.fly() xiaotq.bark() xiaotq.eat()**10-07 重写 **
class Dog: def bark(self): print("dog: bark") class Xiaotq(Dog): def fly(self): print("fly") def bark(self): print("xiaotq: bark") xiaotq = Xiaotq() xiaotq.bark()**10-08 调用被重写的方法 **
class Dog: def bark(self): print("dog: bark") class Xiaotq(Dog): def fly(self): print("fly") def bark(self): print("xiaotq: bark") #第1种调用重写的父类的方法 *Dog.bark(self)* #第2种调用重写的父类的方法 *super.bark()* xiaotq = Xiaotq() xiaotq.bark()**10-09 私有方法、私有属性在继承中的表现 **
class A: def __init__(self): self.num1 = 100 self.__num2 = 200 def test1(self): print("test1") def __test2(self): print("test2") class B(A): pass b = B() b.test1() #私有方法,不能被继承 b.__test2() #私有属性,不能被继承 print(__num2)**10-10 多继承 **
class Base(): def test(self): print("____base") class A(Base): def test1(self): print("____test1") class B(Base): def test2(self): print("____test2") class C(A,B): pass**10-11 多继承-注意点 **
class Base(): def test(self): print("____base") class A(Base): def test1(self): print("____test1") class B(Base): def test2(self): print("____test2") class C(A,B): pass c = C() c.test3() print() 方法的调用优先级:C3算法 C.__mro__ 尽量不要出现相同方法名,解决办法: B.test(self)**10-12 多态 **
class Dog: def print_self(self): print("Dog:---") class Xiaotq(Dog): #方法 def print_self(self): print("Xiaotq:---") #函数 def introduce(temp): temp.print_self() dog1 = Dog() dog2 = Xiaotq() introduce(dog1) introduce(dog2)**10-13多态-强调 **
10-14 多态的理解
10-15 类属性、实例属性
class Tools: #类属性 num = 0 #实例属性 def __init__(self, new_name): self.name = new_name tool1 = Tool("tieqiao") tool2 = Tool("gongbinchan") class Tools: #类属性 num = 0 #实例属性 def __init__(self, new_name): self.name = new_name Tools.num += 1 tool1 = Tools("tieqiao") tool2 = Tools("gongbinchan") print(Tools.num)10-16 实例方法、类方法、静态方法
class Game: #类属性 num = 0 #实例方法 def __init__(self): #实例属性 self.name = "laowang" #类方法 @classmethod def add_num(cls): cls.num = 100 #静态方法 @staticmethod def print_menu(): print("------") game = Game() #第一种调用 Game.add_num() #第二种调用 game.add_num() print(Game.num) #第一种调用 Game.print_menu() #第二种调用 game.print_menu()11-01 设计4s店类-1
class CarStore(object): def order(self, money): if money > 50000: return Car() class Car(object): def move(self): print("--move--") def music(self): print("--music--") def stop(self): print("--stop--") car_store = CarStore() car = car_store.order(100000) car.move() car.music() car.stop()11-01 设计4s店类-2
class CarStore(object): def order(self, car_type): if car_type == "suonata": return Suonata() elif car_type == "mingtu" return Mingtu() class Car(object): def move(self): print("--move--") def music(self): print("--music--") def stop(self): print("--stop--") class Suonata(Car): class Mingtu(Car): pass car_store = CarStore() car = car_store.order("nuonata") car.move() car.music() car.stop()11-01 设计4s店类-3-使用函数完成解耦
class CarStore(object): def order(self, car_type): return select_car_by_type(car_type) def select_car_by_type(car_type): if car_type == "suonata": return Suonata() elif car_type == "mingtu": return Mingtu() class Car(object): def move(self): print("--move--") def music(self): print("--music--") def stop(self): print("--stop--") class Suonata(Car): pass class Mingtu(Car): pass car_store = CarStore() car = car_store.order("nuonata") car.move() car.music() car.stop()11-01 设计4s店类-4-使用类完成解耦-简单工厂模式
class CarStore(object): def __init__(self): self.factory = Factory() def order(self, car_type): return self.factory.select_car_by_type(car_type) class Factory(object): def select_car_by_type(car_type): if car_type == "suonata": return Suonata() elif car_type == "mingtu": return Mingtu() class Car(object): def move(self): print("--move--") def music(self): print("--music--") def stop(self): print("--stop--") class Suonata(Car): pass class Mingtu(Car): pass car_store = CarStore() car = car_store.order("suonata") car.move() car.music() car.stop()11-01 设计4s店类-5-要求
11-01 设计4s店类-6-代码讲解-工厂方法模式
11-02 —new—方法
11-03 创建单例对象
11-04 只初始化一次对象1
11-05 只初始化一次对象2
11-06 异常处理
11-07 异常处理-基本功能
11-08 异常的传递
11-09 抛出自定义异常
11-10 异常处理中抛出异常
11-11 if的各种真假判断
11-12 模块的介绍
11-13 模块
