2018年7月24日初次接触面向对象

昨天io模块知识的回顾补充:
用json模块可以把程序中的数据转换为字符串类型存储到文件中,但是字符串类型不安全,可以用记事本
直接打开查看里面的的所有内容

所以经常用的是pickle模块将程序中的数据转换为二进制的形式存储到文件中,用记事本打开是一串乱码

存储数据的时候如果模式写成w,意思就是将源文件中的全部内容直接以覆盖的形式存储到目标文件中

open在w模式下是创建文件,如果文件已存在,就以覆盖的形式直接修改文件的内容,在r模式下是读取文件

上午第一个视频的最后讲的是代码的容错方式,怎么快速地创个存储数据的文件,用try:  except:

如果要想把程序中所有的用户信息或者文章信息都永久地保存下来,必须要先创建一个文件,
并且文件里面不能为空,比如可以先写一个空字典

读取数据:
load(open("articles.dat","rb"),errors = "ignore")
这里面errors的意思是:读取数据的时候,数据的格式如果出现问题的话它会忽略的,
但是文件里面没有数据它是不能忽略的,照样会报错

定义的两个函数,一个是读取文件中的数据,另一个是向文件中写入数据:
用到了容错的正规操作:异常处理(try  except):如果没有读取到文件/或者文件内容读取失败则创建文件


def load_data():
    try:        # 尝试运行代码:如果出错~就运行except中的代码
        print(">>>>>>程序正在加载数据")
        data.users = pickle.load(open("users.dat", "rb"), errors='ignore')
        data.articles = pickle.load(open("articles.dat", "rb"), errors='ignore')
    except:
        print(">>>>>数据文件读取失败,创建数据文件")

        # 初始化创建文件
        save_data()

# 向文件中保存数据
def save_data():
    pickle.dump(data.users, open("users.dat", "wb"))
    pickle.dump(data.articles, open("articles.dat", "wb"))

把程序中一个不是二进制的对象,以二进制的方式存储到文件中:序列化存储
将对象按照一定的顺序排列起来,拆分成二进制数据存储!
从二进制文件中,读取数据->转换成程序中的某个对象:反序列化 

对象->文件
pickle:序列化:按照一定的顺序拆分成二进制数据
json:类型转换:直接转换成字符串

**************************************************
                     面向对象的学习      

今天遇到的新单词:
parameter   n参数
initiation  n开始


面向对象是一种编程思想,是在面向过程的基础上进行完善和补充,通过对象和
对象之间的相互协作完成项目功能的开发。
之前是面向过程的函数式开发方式:代码中封装了大量的包含处理步骤的函数,只适合中小型项目开发,
如果遇到大型项目的开发[代码的逻辑处理方式不够成熟,容易导致代码高耦合!]

函数  vs 方法:
类型外边定义的函数叫做函数
类型里面定义的函数叫做方法,方法是一种特殊的函数,只能在类型中使用!
注意:方法和函数的最大的区别:第一个参数可以隐式接受当前对象作为实际参数
方法是定义在类型的内部的!
方法的调用必须通过对象的引用变量调用
author = Author()
author.introduction()


函数中的任何形式参数,在调用的时候都需要明确的传递数据
函数是定在在类型的外部的!
函数的调用直接通过函数名称调用

面向对象编程:其实就是将项目中需要的各种数据类型、功能封装成对象、函数
通过对象、函数之间的相互协作,完成功能开发。

什么是类型:数据类型的简称,也称为“类”,可以自定义,是一个具有某种特征的数据类型。
类型中需要定义对象需要的特征[属性|变量]和行为[方法]
代码中可以通过class关键字,自定义声明一个数据类型,见名知意,首字母要大写

对象:有具体特征的事物,也就是定义的类型中的一个具体的值
代码中的对象,需要通过类型来创建
如:tom = Person('汤姆', 18, '男')
通过类型创建对象时,自动调用执行__new__(),和__init__()方法,将对象需要的数据传递过去
__new__()方法创建对象,__init__()方法初始化数据
 tom:变量,存储了Person()对象的内存地址
对象的引用变量【变量中存放的是可以引用到对象的内存地址】
使用对象:直接通过变量操作对象
print(type(tom))--> <class '__main__'.Person>


语法:对象的特征是需要在类型中定义的!
在通过类型创建对象时,才会给具体的特征赋值
给对象的特征赋值,固定语法:在__init__()函数中操作
class Author:
# 给对象的特征赋值,在__init__()中进行操作
 def __init__(self, username, password, nickname):
     self.username = username
     self.password = password
     self.nickname = nickname


在Python中,有一种特殊的函数:魔法函数
每个魔法函数有一些特定的功能,方法名称都是固定的
魔法函数的命名规则:函数的前后各有两个下划线!


对象的属性和方法

类之间的开发到代码分层开发:
界面层->服务类型层,数据定义类型层,自定义数据类型层,

类型后边带括号和不带括号的区别?

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/81193381
今日推荐