pickle模块扩展

1 pickle之文件操作

示例1

with open("test", 'rb') as f:
lines = f.readlines()
print(pickle.load(f))

运行报错:

print(pickle.load(f))

EOFError: Ran out of input

with open("test", 'rb') as f:
print(pickle.load(f))

运行正常

[1, 2, 3]

pickle.load的时候只能有load不能有别的

示例2

正常读
f1 = open("test1", "r") f1.readline()

运行正常

读取的文件为空
pickle读文件
f1 = open("test1", "rb")
print(pickle.load(f1))

运行报错

EOFError: Ran out of input

pick不能load空文件

2 面向对象

特性:

  • Encapsulation 封装

    在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法

  • Inheritance 继承

    一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承

  • Polymorphism 多态

    多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。

经典类和新式类

Python2中class 类名(Object)为新式类,class 类名为经典类

Python3中都是新式类。

区别

新式类是广度优先,而经典类是深度优先

3 面向对象基础知识

如何定义一个类

clss People(object):
pass

People为类名,首字母大写。

类的属性

class People(object):
def __init__(self, name, age):
self.name = name
self.__age = age

self为实例本身,self.name = name是类的一个属性,self.__age =age的age前面有两个下划线为私有属性。

私有属性是不能够在类外通过对象名来进行访问的。

如果要访问需要_类名__name这样来进行访问,也可以称为伪私有属性。

类的方法

定义方法采用def关键字,一般以名为'self'的变量作为该参数(用其他名称也可以),而且需要作为第一个参数

class People(object):
def __init__(self, name, age):
self.name = name
self.__age = age
def mouseget(self):
print("hahaha")

mouseget为方法的名称,定义方法的关键字def。

类的内置方法

  构造方法__init__(self,....)在生成对象时调用,可以用来进行一些初始化操作,不需要显示去调用,系统会默认去执行。构造方法支持重载,如果用户自己没有重新定义构造方法,系统就自动执行默认的构造方法。

  析构方法__del__(self)在释放对象时调用,支持重载,可以在里面进行一些释放资源的操作,不需要显示调用。

4 继承

示例1 全部继承于父类

class People(object):
def __init__(self, name, age):
self.name = name
self.__age = age
def __mouseget(self):
print("hahaha") class Dpope(People):
def nishi(self):
print(self.name, self._People__age)
Dpope("名字","年龄").nishi()

运行结果: 名字 年龄

People是Dpope的父类,因为Dodple没有name和age变量,所以会去父类里面寻找,因为找到了,所以会输出。

示例2 继承并有自己的属性

class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __mouseget(self):
print("hahaha") class Dpope(People):
def __init__(self, name, age, sex):
super(Dpope, self).__init__(name, age)
self.sex = sex
def nishi(self):
print(self.name, self.age, self.sex)
Dpope("名字","年龄", "性别").nishi()

要想有自己的属性并还想继承父类,可以用super继承的方法。

class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __mouseget(self):
print("hahaha") class Cop(People):
pass class Dpope(People, Cop):
def __init__(self, name, age, sex):
super(Dpope, self).__init__(name, age)
self.sex = sex def nishi(self):
print(self.name, self.age, self.sex)
Dpope("名字","年龄", "性别").nishi()

多继承从左到右依次寻找父类

5 多态

“多态”,英文是:Polymorphism,在台湾被称作“多型”。维基百科中对此有详细解释说明。

多型(英语:Polymorphism),是指物件导向程式执行时,相同的讯息可能会送給多个不同的类別之物件,而系统可依剧物件所属类別,引发对应类別的方法,而有不同的行为。简单来说,所谓多型意指相同的讯息給予不同的物件会引发不同的动作称之。

再简化的说法就是“有多种形式”,就算不知道变量(参数)所引用的对象类型,也一样能进行操作,来者不拒。

例如著名的 repr() 函数,它能够针对输入的任何对象返回一个字符串。这就是多态的代表之一。

def length(x):

... print "The length of", repr(x), "is", len(x)

class Animal:
def __init__(self, name=""):
self.name = name def talk(self):
pass class Cat(Animal):
def talk(self):
print "Meow!" class Dog(Animal):
def talk(self):
print "Woof!" a = Animal()
a.talk() c = Cat("Missy")
c.talk() d = Dog("Rocky")
d.talk()

运行结果

$ python 21101.py

Meow!

Woof!

Python自动化之pickle和面向对象初级篇的更多相关文章

  1. python自动化开发-[第八天]-面向对象高级篇与网络编程

    今日概要: 一.面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) 2.__setattr__,__getattr__,__delattr__ 3.二 ...

  2. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  3. Python基础—面向对象(初级篇)

    一.什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计),python语言比较灵活即支持面向对象编程也支持面向函数式编程. 面向过程编程 ...

  4. python 自动化之路 day 面向对象基础

    1.面向對象基础概述 面向过程: 根据业务逻辑从上到下垒代码(如果程序修改,对于依赖的过程都需要进行修改.) 函数式: 将某功能代码封装到函数中,如后便无需重复编写,仅需要调用函数即可 面向对象: 世 ...

  5. python自动化--语言基础五面向对象、迭代器、range和切片的区分

    面向对象 一.面向对象简单介绍: class Test(): #类的定义 car = "buick" #类变量,定义在类里方法外,可被对象直接调用,具有全局效果 def __ini ...

  6. Python之路系列:面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子: class ...

  7. python_way ,day7 面向对象 (初级篇)

    面向对象 初级篇   python支持 函数 与 面向对象   什么时候实用面向对象? 面向对象与函数对比 类和对象 创建类 class 类名 def 方法名(self,xxxx) 类里面的方法,只能 ...

  8. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  9. Python 面向对象(初级篇)

    51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后 ...

随机推荐

  1. eclipse自动部署问题

    1. 使用myeclipse自动部署的方法(使用myeclipse 2015自动部署有问题,待解决)(换成2014的便可以自动部署): 1.Window->preferences->Mye ...

  2. C#----XML操作小结

    结点和元素的区别: * 结点和元素的区别:  * 结点包括元素,结点可以是一个文本,也可以是一个属性,结点包括的类型在XmlNodeType中总结.  * <root id="这是一个 ...

  3. iOS7以上图片模糊效果

    模糊后的效果 模糊后的效果 框架UIImage+BlurredFrame里的 applyLightEffectAtFrame方法 例如 bgImage = [bgImage applyLightEff ...

  4. Fork函数初识

    fork函数用于创建子进程,典型的调用一次,返回两次的函数.其中调用进程返回子进程的PID,而子进程则返回0.但是两个进程的执行顺序是不定的. fork函数调用完成以后父进程的虚拟存储空间被拷贝给了子 ...

  5. tamper绕WAF详解

    0x00 背景 sqlmap中的tamper脚本来对目标进行更高效的攻击. 由于乌云知识库少了sqlmap-tamper 收集一下,方便学习. 根据sqlmap中的tamper脚本可以学习过绕过一些技 ...

  6. C#通用类型转换 Convert.ChangeType

    ];         object innerValue = ChangeType(value, innerType);         return Activator.CreateInstance ...

  7. SpringMVC -rest风格修改删除

    REST风格

  8. application

    改变全局application到页面的参数 添加参数:HttpServletRequest req 使用req.getSession().getServletContext().setAttribut ...

  9. 昨天的这个先补上--这个是关于 JQ 的移动 和 渐变特效的点击事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. json的中括号和大括号的使用?

    参考这篇文章: http://www.cnblogs.com/sgdkg/archive/2012/12/03/2799723.html json 变量有两种可能, 可能是一个对象, (类似 类的实例 ...