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. 用javascript替换URL中的参数值

    <script> function changeUrlArg(url, arg, val){ var pattern = arg+'=([^&]*)'; var replaceTe ...

  2. C#----使用WindowsMediaPlayer 同时播放多个声音

    使用Windows Media Player 其实就是使用组件AxWindowsMediaPlayer. 添加两个引用:Interop.WMPLib.dll和AxInterop.WMPLib.dll. ...

  3. CPU绑定操作

    使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系 [root@svn ~]# virsh vcpuinfo 16 VCPU: 0 CPU: 3 状态: running CP ...

  4. PetaPoco dynamic

    PetaPoco最初的灵感来自Massive-通过dynamic Expando objects返回一切.对于大多数情况我觉得这比较麻烦,更喜欢强类型的类.但是有些时候支持dynamic也是有用的-特 ...

  5. OS命令注入

    SSL http://kb.cnblogs.com/page/162080/ http://baike.baidu.com/link?url=jPitKuDw_ncDlMbOc1SkWzM9TuKX9 ...

  6. PHP访问MSSQL数据库(实例代码)

     本例子只作为简单的引导,实现一个简单的查询: <!DOCTYPE HTML> <html lang="en-US"> <head> <t ...

  7. java中InvocationHandler 用于实现代理。

    以下的内容部分参考了网络上的内容,在此对原作者表示感谢! Java中动态代理的实现,关键就是这两个东西:Proxy.InvocationHandler,下面从InvocationHandler接口中的 ...

  8. JaxWsProxyFactoryBean 与 JaxWsDynamicClientFactory

    1. JaxWsProxyFactoryBean    简介:调用方式采用了和RMI类似的机制,即客户端直接调用服务器端提供的服务接口(interface),CXF通过运行时代理生成远程服务的代理对象 ...

  9. webapi支持跨域访问

    写在前面 在实际应用中,跨域请求还是比较常见的,如何上接口直接支持跨域的访问呢? demo 场景项目A有个接口用来获取用户列表,现在项目b也有个功能需要加载用户列表.这两个项目在两个域名下,至少端口好 ...

  10. OCS 开放缓存服务

    开放缓存服务( Open Cache Service,简称OCS)是在线缓存服务,为热点数据的访问提供高速响应.说白了,就是一款基于memcached开发的对外云缓存服务器,完全可以把OCS当成mem ...