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 += 1
4-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 += 1
5-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 += 1
5-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("")
break
5-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:
pass
6-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 assignment
6-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 = 22
6-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 函数名():
return
6-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 = 300
7-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 44
7-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
字典:
**B
7-16 引用
a = 100
b = a
print(type(a))
print(type(b))
print(id(a))
print(id(b))
<type 'int'>
<type 'int'>
17405856
17405856
把a保存的地址,给了b
7-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 object
8-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,a
8-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
**center
8-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的年龄是:28
9-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 = "%50生的"
elif cooked_time >= 5 and cooked_time < 8:
self.cookedString = "%100"
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 = "%50生的"
elif self.cooklevel >= 5 and self.cooklevel < 8:
self.cookedString = "%100"
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)
问题:
打印中文在控制台不对
地瓜的状态:%50生的(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.name
10-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 模块