安卓开发之python(1)

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 模块

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值