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. CentOS下crond定时任务详细介绍

    目录 1.定时任务crond介绍... 2.crond定时任务限权... 3.Crontab用法... 4.Crontab命令的书写格式... 5.定时服务器时间同步... 6.写定时任务注意点.. ...

  2. FCC上的初级算法题

    核心提示:FCC的算法题一共16道.跟之前简单到令人发指的基础题目相比,难度是上了一个台阶.主要涉及初步的字符串,数组等运算.仍然属于基础的基础,官方网站给出的建议完成时间为50小时,超出了之前所有非 ...

  3. 斗鱼的sidebar的实现简陋的demo

    斗鱼的sidebar的实现简陋的demo <!DOCTYPE html> <html> <head lang="en"> <meta ch ...

  4. authorization配置

    在 Web.config 文件的<configuration>标记的子标记<authorization>和</authorization>之间用于设置应用程序的授权 ...

  5. Lua 之数据结构

    Lua 之数据结构 数组 通过整数下标访问的table中的元素,即是数组,下标默认从1开始. 一个创建二维数组的例子: mt = {} , do mt[i] = {} , do mt[i][j] = ...

  6. System.nanoTime与System.currentTimeMillis的区别

    平时产生随机数时我们经常拿时间做种子,比如用 System.currentTimeMillis的结果,但是在执行一些循环中使用了System.currentTimeMillis,那么每次的结 果将会差 ...

  7. webservice报错Message part refundRequest was not recognized. (Does it exist in service WSDL?)

    最近在做一个支付的接口. 因为接口方使用webservice交互.  我只能去学习了下webservice 现在出了一个很古怪的问题~  我在请求他们url的时候, 返回给我找不到控制名错误 Mess ...

  8. Apache CXF实现WebService入门教程(附完整源码)

    Apache CXF实现WebService非常简单实用,只需要几步就可以实现一个简单的web service. 首先我们需要新建一个maven项目,在pom中添加依赖和jetty作为测试的web s ...

  9. java String 中 intern方法的概念

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

  10. webapp中fixed问题解决方案

    主要问题: 1,头部输入框固定后,只要再滑动内容的话,输入框会随着滑动内容而滑动. 2,在低端机:2.3以下的安卓机,你会发现怎么解决都不行的,系统浏览器是不会支持的,头部底部固定的话会滑动内容而滑动 ...