day21_24

序列化模块

数据类型转化成字符串的过程就是序列化

为了方便数据存储与网络传输

json

dumps
loads
dump 和文件相关
load 不能多次load

pickle

方法和json一样
dump 和load 的时候 文件时rb或者时wb打开的
支持python所有的数据类型
序列化和反序列化需要相同的环境

shelve模块

open方法
open方法获取一个文件句柄
操作和字典类似

模块的导入

import

from import

as重命名

多支持埵名字导入

sys.moudles记录了所有被导入的模块

sys.path记录了导入模块的时候寻找的所有路径

包的学

把解决一类问题的模块放在同一个文件夹里,这就是包

异常处理

try:
需要测试的代码
except 错误类型:
错误提示
else:
如果欸有异常则处理else后面的内容
finally:# finally和return相遇的时候,依然执行
执行的代码

异常处理的时候,可以使用多个except,程序会自动选择与之匹配的错误, Exception是可以处理所有的异常错误的。

三级菜单

面向对象引入

# 人狗大战游戏
def person(name,blood,attack,sex):
    # 人的技能——打
    def attach(person,dog):
        dog['blood'] -= person['attack']
        print('%s被打了,掉了%s的血' % (dog['name'],person['attack']))
    person = {
    'name':name,
    'blood':blood,
    'attack':attack,
    'sex':sex
    }
    return person

alex = person('狗子',100,1,'unknow')
nezha = person('哪吒',90,1,'男')   
print(alex)
print(nezha)
# 这样做(定义一个函数)精简,方便增加参数,方便修改,也增加了游戏的规范——创建了一个人模子

def Dog(name,blood,attack,sex,kind):
    # 狗的技能——咬
    def bite(dog,person):
        person['blood'] -= dog['attack']
        print('%s被咬了,掉了%s的血' % (person['name'], dog['attack']))

    dog = {
        'name':name,
        'blood':blood,
        'attack':attack,
        'sex':sex,
        'kind':kind
    }  
    return dog
erhu = Dog('jinlaonban',1000,100,'unknow','teedy')
print(erhu)
bite(erhu,alex)
print(alex)
{'name': '狗子', 'blood': 100, 'attack': 1, 'sex': 'unknow'}
{'name': '哪吒', 'blood': 90, 'attack': 1, 'sex': '男'}
{'name': 'jinlaonban', 'blood': 1000, 'attack': 100, 'sex': 'unknow', 'kind': 'teedy'}
狗子被咬了,掉了100的血
{'name': '狗子', 'blood': 0, 'attack': 1, 'sex': 'unknow'}
class Person:
    def __init__(self,*args):   # self相当于一个字典,他把后面的*args的值绑在了一起
        self.name = args[0]
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
        # init 函数不能与return函数混合用
    

jinjia = Person('大王',200,566,200,'who知')   #这个返回的至就是一个对象
print(jinjia.name)
print(jinjia.hp)
print(jinjia.aggr)
print(jinjia.sex)


print(jinjia.__dict__)
print(jinjia.__dict__['name'])
# 对象=类名():
#过程;
    #类名()  首先会创建一个对象,创建了一个self变量
    #调用init方法,类名括号里面的参数会被这里接收
    #执行init方法
    #返回self
大王
200
566
200
{'name': '大王', 'hp': 200, 'aggr': 566, 'sex': 200}
大王

面向对象编程

思想:角色的抽象,创建类,创建角色(实例化),操作这些实例

面向对象的关键字:class 类名(且类名大写)

class类名:
def init(self):pass 初始化方法,创建了一个slef空对象,这个slef里面存的属性是以字典形式存在的。
静态属性 = ‘***’

调用: 类名.静态属性——存储在类的命名空间里

对象 = 类名() #实例化:创造了袷self独享,执行init方法,返回self对象给外部

类名可以调用方法(对象)

对象.属性
对象.方法 用对象去调用方法,这个方法就被称为绑定方法。
类可以使用对象里的属性么?false

组合

一个类的对象是另外一个类对象的属性

#例
class A:
    def __init__(self):
        selff.name = 'ego'
        
class B:
    def __init__(self):
        self.year = year
        self.month = month
        self.day = day
        
b = B(18,5,9)
a = A()
a.birth = b
b.year
a.birth.year

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in 
     10         self.day = day
     11 
---> 12 b = B(18)
     13 a = A()
     14 a.birth = b


TypeError: __init__() takes 1 positional argument but 2 were given

你可能感兴趣的:(学习笔记)