整理一下自己初学python时打的一些代码,方便日后用的时候查阅。
61 多继承
class Base:
def test(self):
print("base test")
class A(Base):
def test1(self):
print("test1")
class B(Base):
def test2(self):
print("test2")
class C(A, B): # 多继承
pass
c = C()
c.test()
c.test1()
c.test2()
62 多继承注意点
class Base:
def test(self):
print("base")
class A(Base):
def test(self):
print("A")
class B(Base):
def test(self):
print("B")
class C(A, B): # 多继承
pass
c = C()
c.test() # C内没有的的话 会调A的 内部有个C3算法
63 多态
class Dog(object):
def print_self(self):
print("大家好,我是xxx,请多多关照")
class Xiaotianquan(Dog):
def print_self(self):
print("Hello~ Everyone~ I'm your Boss")
def introduce(temp): # 多态!!!直到用的时候才知道用的是父类还是子类
temp.print_self()
dog1 = Dog()
dog2 = Xiaotianquan()
introduce(dog1)
introduce(dog2)
64
class Tool(object):
# 属性
num = 0 # 类属性
# 方法
def __init__(self, new_name):
self.name = new_name
Tool.num += 1
too11 = Tool("铁锹")
tool2 = Tool("铲子")
tool3 = Tool("水桶")
# Tool 为类对象 对应的属性为类属性
# tool1、tool2、tool3是实例对象 对应的属性为实例属性
print(Tool.num)
65 实例方法、类方法、静态方法
class Game:
# 类属性
num = 0
# 实例方法
def __init__(self):
# 实例属性
self.name = "laowang"
@classmethod # 加上这句话就是 类方法
def add_num(cls):
cls.num = 100 # 修改类属性
@staticmethod # 静态方法 可以没有任何参数
def print_menu(): # 实例方法必须写个self
print("-" * 50)
print(" 打豆豆V1.1 ")
print(" 1. 开始游戏")
print(" 2. 结束游戏")
print("-" * 50)
game = Game()
# Game.add_num()
# print(Game.num)
game.add_num()
print(game.num)
game.print_menu() # 通过类去调用静态方法
66 练习-4s店
class Carstore(Store):
def __init__(self):
self.factory = Factory()
def order(self, car_type):
return self.factory.select_car_type(car_type)
class Factory(object):
def select_car_type(self, car_type): # 解耦合
if car_type == "索纳塔":
return Suonata()
elif car_type == "名图":
return Mingtu()
class Car(object):
def move(self):
print("The car is moving!")
def music(self):
print("The music is on!")
def stop(self):
print("The car stoped!")
class Suonata(Car):
pass
class Mingtu(Car):
pass
car_store = Carstore()
car = car_store.order("索纳塔")
car.move()
car.music()
car.stop()
67 new方法
class Dog(object):
def __init__(self):
print("-----init----")
def __del__(self):
print("-----del----")
def __str__(self):
print("-----str----")
def __new__(cls): # 创建一个对象就调用
print(id(cls))
print("-----new----")
return object.__new__(cls)
print(id(Dog))
xta = Dog() # 这句话 执行三步:
# 1.调用__new__方法来创建对象 找了一个变量接收__new__的返回值 返回值表示创建出来的对象的引用
# 2.调用__init__方法
# 3.返回对象的引用
# C++里的构造函数 = __init__ + __new__
# 但python是两个方法
68 创建一个单例
class Dog:
__instance = None # 私有属性
__init_flag = False
def __new__(cls, name):
if cls.__instance == None: # 说是等式运算符无法与None比较 但程序依旧正常运行了?
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self, name):
if Dog.__init_flag == False:
self.name = name
Dog.__init_flag = True
# 不管创建几个 指向的都是同一个
a = Dog("哈哈")
print(id(a))
print(a.name)
b = Dog("哮天犬") # 修改原来的“哈哈”
print(id(b))
print(b.name)
# 说明 init 和 new 是分开的
69 异常处理
try:
# 11/0
# open("xxx.txt") # 文件不存在
# print(num) # 名字错误
print("-----1-----")
except NameError: # 预处理
print("如果捕获到异常后要做的处理......")
except FileNotFoundError:
print("文件不存在.....")
# except (NameError, FileNotFoundError): # 可以用元组的方式放在一起
# print("文件不存在.....")
except Exception as ret: # 把原来的显示提示
print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
print(ret)
else:
print("没有异常才执行")
finally:
print("-----finally-----") # 不管有没有异常 最后要执行
print("-----2-----")
70 异常处理Ctrl+C
import time # 放顶部就行了
while True:
print("hhha")
time.sleep(1) # Ctrl+C没停啊????
71 if的真假判断
# 条件为假False
if "":
print("---1---")
if None:
print("---2---")
if 0:
print("---3---")
if []:
print("---4---")
if {}:
print("---5---")
# 为真
if 1:
print("haha")
if -1: # 数字0为假 非0为真
print("hhha")
if "a":
print("hhhhha")
72 模块.py都是模块
import sendmsg # 模块导入时会把模块程序全部走一遍
sendmsg.test1()
sendmsg.test2()
from sendmsg import test1
from sendmsg import test2
test1()
test2()
from sendmsg import *
# 优点:导入sendmsg的所有功能
# 缺点:如果导入了两个模块 里面有同名功能 其中一个则会被覆盖
73
import xxx
class Name(object):
pass
def x():
pass
def main():
pass
if __name__ == '__main__':
main() # 整个程序最开始执行的地方
74 all
from sendmsg import *
__all__ = ["test1"]
# 本来 * 会导入所有功能,现在相当于重新定义了 * 的内容,只导入test1功能
# 这样别人只能用 __all__ 里面的内容
def test1():
print("----test1----")
def test2():
print("----test2----")
num = 100
class Test(object):
pass
75 给程序传参数
import sys
print(sys.argv)
name = "laowang"
print("welcome %s" % name)
76 列表生成式
a = []
i = 10
while i <= 77:
a.append(i)
i += 1
# 从10到77
for i in range(10, 78):
print(i)
# range(10, 18, 2) # range就是生成列表的
# 用法类似于切片
# range(1, 10000000000)
# python2中range有风险:数据太大 内存不够
# python3是用的时候才生成,没有风险
# 直接生成1-17的列表
a = [i for i in range(1, 18)]
print(a)
# 生成一个有17个12的列表
a = [12 for i in range(1, 18)]
print(a)
# 0-9
c = [i for i in range(10)]
print(c)
# if条件嵌套
c = [i for i in range(10) if i % 2 == 0]
print(c)
# [0, 0, 1, 1, 2, 2]
d = [i for i in range(3) for j in range(2)]
print(d)
# [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
d = [(i, j) for i in range(3) for j in range(2)]
print(d)
# 空间坐标
e = [(i, j, k) for i in range(2) for j in range(3) for k in range (2)]
print(e)
77 集合、元组、列表
a = (11, 22, 33, 11, 22, 33) # 元组tuple
b = [11, 22, 33, 11, 22, 33] # 列表list
c = {11, 22, 33, 11, 22, 33} # 集合set
print(a) # (11, 22, 33, 11, 22, 33)
print(b) # [11, 22, 33, 11, 22, 33]
print(c) # {33, 11, 22}
# 元组不可改,只读
# 列表支持增删查改
# 集合不能有相同的东西
# {} 有字典 也有集合
# 去除列表内重复元素
d = [11, 22, 33, 44, 11, 22, 33]
f = set(d) # 变为集合 set
print(f)
d = list(f) # 类型转为列表 list
print(d)
78 练习-名片管理系统(升级版)
members = [{"name": "羊", "qq": 1234567, "weixin": "yang123", "address": "合肥"}]
def print_func():
print("*"*50)
print(" 名片管理系统 V0.01")
print(" 1: 添加一个新的名片")
print(" 2: 删除一个名片")
print(" 3: 修改一个名片")
print(" 4: 查询一个名片")
print(" 5: 打印所有名片")
print(" 6: 保存信息")
print(" 0: 退出系统")
print("*"*50)
def new_card():
n_name = input("请输入新的名字:")
n_qq = input("请输入新的QQ:")
n_weixin = input("请输入新的微信:")
n_address = input("请输入新的住址:")
infor = {}
infor["name"] = n_name
infor["qq"] = n_qq
infor["weixin"] = n_weixin
infor["address"] = n_address
members.append(infor) # 将一个字典添加到列表中
print(members)
def modify_card():
global members
person = input("请你输入你的想修改的名片:")
members.remove(person)
person2 = input("请输入修改后的名片:")
members.append(person2)
print(members)
def seek_card():
global members
name = input("输入你想查询的名字:")
name_flag = 0
for temp in members:
if temp["name"] == name:
print(temp)
name_flag = 1
break
if name_flag == 0:
print("查无此人")
def print_card():
global members
print("姓名 \tQQ \t微信 \t住址")
for temp in members:
print("%s\t%s\t%s\t%s" % (temp["name"], temp["qq"], temp["weixin"], temp["address"]))
def save_2_file():
# 把已经添加的信息保存到文件中
f = open("backup.data", "w") # 以写的方式打开
f.write(str(members))
f.close()
def load_infor():
global members
try:
f = open("backup.data")
members = eval(f.read())
f.close()
except Exception:
pass
def main(): # 主函数
# 恢复(加载)之前的数据到程序中
load_infor()
# 打印功能提示
print_func()
while True:
num = int(input("请输入功能号:"))
if num == 1:
new_card()
elif num == 2:
pass
elif num == 3:
modify_card()
elif num == 4:
seek_card()
elif num == 5:
print_card()
elif num == 6:
save_2_file()
elif num == 0:
print("感谢你的使用!")
break
else:
print("输入错误,请重新输入!")
print("")
if __name__ == "__main__":
# 调用主函数
main()