day32-python阶段性复习六
面向对象
编程的一种方法
一些皆对象
面向过程和面向对象编程
面向过程编程:函数式编程。c等
面向对象编程:c++ ,java,python等
看具体问题
用哪种方法
类和对象:是面向对象中的两个重要的概念
类:是对事物的抽象,比如:人类,球类
对象:是类的一个实例,比如足球,篮球
方法:函数, 动态,动作
属性:变量,静态,一个事物的特征
实例说明
球类可以对球的特征和行为进行抽象,任何可以实例化一个真实的球体出来
面向对象的主要思想是:
封装 类的定义
类定义
类把需要的变量和函数组合成一起,这种包含称为封装
class A(object): (遵循首字母大写的定义)
类的结构
class类名:
成员变量-属性
成员函数-方法
继承
多态
这种思想方便解决较为复杂的项目,且维护起来较为容易
例如:
1 #!/usr/bin/python
2 class People(object):
3 color = 'yellow'
4
5 def think(self):
6 self.color = "black"
7 #print "I am a think"
8 print "I am a %s" % self.color
9 print "I am a think"
10 #classmethod
11 ren = People()
12 print ren.color
13 ren.think()
~
注意命令一致
类的属性
使用范围分为
共有属性 在类中和类外都能调用
私有属性 只能在类的内部调用 命名方法以"__"双下划线开始的变量
可以通过instamce.classname_attribute方式访问 实例化对象的名字._类的名字_属性
内置属性:由系统在定义类的时候默认添加,由前后双下划线构成,__dict__,等
类的方法
定义和函数一样,但需要self作为第一个参数
方法为:
共有方法 在类中和类外都可调用
私有方法 只能在类中调用,在方法前面加"__"双下划线
self 区别类方法与函数,self表示执行函数本身。
类方法(类的方法不能直接通过类调用)能被类直接调用的方法叫类方法 被classmethod(test)处理,括号内类的方法的名称
静态方法 相当于全局函数,不加self参数。需要staticmethod()处理
装饰器
@classmethod
@staticmethod
只对下面一个函数起作用
python内部类
内部类实例化方法
1、直接使用外部类调用内部类
object_name=outclass_name.inclass_name()
2、先对外部类进行实例化,然后在实例化内部类
out_name=outclass_name()
in_name=out_name.inclass_name()
in_name.method()
魔术方法
__str__(self) 更改直接打印类的输出结果
print ren
构造函数与析构函数
构造函数
__init__():可选,python后台不默认 提供
初始化类
析构函数:
__del__(); 可选,python后台会默认提供,
用于释放对象占用的资源
垃圾回收机制
python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不在使用的对象,
python采用"引用计数"的算法方式来处理回收,即:当某个对象在其作用域内不在被其他对象引用的时候,python就自动清除对象
gc模块的collect()可以一次性收集所有待处理对对象(gc.collect)
类的继承
继承是面向对象的重要特征之一;
继承关系:继承是相对两个而言的父子关系,子类继承父类的所有公有属性和方法
继承实现了代码重用
使用继承
继承可以重用已经存在的数据和行为,减少代码的重复编写。python在类名后使用一对括号来表示继承关系,括号中的类即为父类。
class Myclass(ParentClass)
如果父类定义了__init__方法,子类必须显式调用父类的__init方法
ParentClass.init(self,[args..])
如果子类需要扩展父类的行为,可以添加__init__方法的参数。
多重继承
python支持多重继承,即一个类可以继承多个父类:
语法
class class_name(Parent_c1,Parent_c2,...) (谁在前面继承谁的所有属性,也可以直接调用)
注意
当父类中出现多个自定义的__init__方法时,多重继承只执行第一个类的__init__方法,其他不执行
类 的方法总结
写一个启动脚本(类的方式)
一类的定义与脚本的结构
确定脚本的结构
定义类的属性
1 #!/usr/bin/env python
2 #coding:utf8
3 import sys
4 import os
5 from subprocess import Popen, PIPE
6 class Process(object):
7 '''memcached rc script'''
8 args = {'USER':'memcached',
9 'PORT':11211,
10 'MAXCONN':1024,
11 'CACHESIZE':'',
12 'OPTIONS':''}
13 def __init__(self, name, program , workdir):
14 self.name = name
15 self.program = program
16
17 self.workdir = workdir
18 def _init(self):
19 '''/var/tmp/memcached'''
20 if not os.path.exists(self.workdir):
21 os.mkdir(self.workdir)
22 os.chdir(self.workdir)
23 def _pidFile(self):
24 '''/var/tpm/memcached/memcached.pid'''
25 return os.path.join(self.workdir,"%s.pid" % self.name)
26
27 def _writhPid(self):
28 if self.pid:
29 with open(self._pidFile(),'w') as fd:
30 fd.write(str(self.pid))
31 def _readConf(self, f):
32 with open(f) as fd:
33 lines = fd.readlines()
34 return dict([i.strip().replace('"','').split('=') for i in lines
35 def _parseArgs(self):
36 conf = self._readConf('/etc/sysconfig/memcached')
37 if 'USER' in conf:
38 self.args['USER'] = conf['USER']
39 if 'PORT'in conf:
40 self.args['PORT'] = conf['PORT']
41 if 'MAXCONN' in conf:
42 self.args['MAXCONN'] = conf['MAXCONN']
43 if 'CACHESEIZE' in conf:
44 self.args['CACHESIZE'] = conf['CACHESIZE']
45 options = ['-u', self.args['USER'],
46 '-p', self.args['PORT'],
47 '-m', self.args['CACHESIZE'],
48 '-c', self.args['MAXCONN']]
49 os.system("chown %s %s" % (self.args['USER'], self.workdir))
50 return options
51
52 def start(self):
53 pid = self._getPid()
54 if pid:
55 print "%s is running..." % self.name
56 sys.exit()
57 self._init()
58
59 cmd = [self.program] + self._parseArgs() + ['-d','-P', self._pidFile
60 print cmd
61 p = Popen(cmd, stdout=PIPE)
62 # self.pid = p.pid
63 # self._writhPid()
64 print "%s start Sucessful" % self.name
65
66 def _getPid(self):
67 p =Popen(['pidof', self.name], stdout=PIPE)
68 pid = p.stdout.read().strip()
69 return pid
70 def stop(self):
71 pid = self._getPid()
72 if pid:
73 os.kill(int(pid), 15)
74 if os.path.exists(self._pidFile()):
75 os.remove(self._pidFile())
76 print "%s is stopped" % self.name
77
78 def restart(self):
79 self.stop()
80 self.start()
81
82
83 def status(self):
84 pid = self._getPid()
85 if pid:
86 print "%s is already runing" % self.name
87 else:
88 print "%s is not runing" % self.name
89
90 def help(self):
91 print "Usage: %s {start|stop|status|restart} " % __file__
92
93 def main():
94 name = 'memcached'
95 prog = '/usr/bin/memcached'
96 args = '-u nobody -p 11211 -c 1024 -m 64'
97 wd = '/var/tmp/memcached'
98 pm = Process(name=name,
99 program=prog,
100 # args=args,
101 workdir=wd)
102 try:
103 cmd = sys.argv[1]
104 except IndexError,e:
105 print "Option error"
106 sys.exit()
107 if cmd == 'start':
108 pm.start()
109 elif cmd == 'stop':
110 pm.stop()
111 elif cmd == 'restart':
112 pm.restart()
113 elif cmd == 'status':
114 pm.status()
115 else:
116 pm.help()
117 if __name__ == '__main__':
118 main()
day32-python阶段性复习六的更多相关文章
- Python并发复习1 - 多线程
一.基本概念 程序: 指令集,静态, 进程: 当程序运行时,会创建进程,是操作系统资源分配的基本单位 线程: 进程的基本执行单元,每个进程至少包含一个线程,是任务调度和执行的基本单位 > 进程和 ...
- python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍
目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...
- Python学习笔记六
Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...
- Python学习第六课
Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...
- Python爬虫利器六之PyQuery的用法
前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有 ...
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...
- Python爬虫入门六之Cookie的使用
大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
随机推荐
- ZooKeeper是什么
ZooKeeper概念 相信大家对 ZooKeeper 应该不算陌生,但是你真的了解 ZooKeeper 是什么吗?如果别人/面试官让你讲讲 ZooKeeper 是什么,你能回答到哪个地步呢? 本人曾 ...
- TP无限回复
引入文件和css样式 <script src="__PUBLIC__/bootstrap/js/jquery-1.11.2.min.js"></script> ...
- sitecore开发入门Sitecore的CRUD操作 - 第一部分
在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...
- win10安装JDK
1.下载 首先,在官网下载 JDK:Oracle 官网 如上图所示,在 Oracle 官网下载 JDK,有一点需要注意,那就是在咱们下载合适的 JDK 之前,需要先点击“标记1”所在的按钮,选择接受. ...
- ajax返回数据为undefined
在使用ajax异步请求后台返回数据后,使用console.log(data.message)打印返回数据,显示为undefined.苦恼了很久,终于在网上找到了答案. 先给大家看下异步代码: /*清零 ...
- .NetCore实现简单的分布式缓存
分布式缓存能够处理大量的动态数据,因此比较适合应用在Web 2.0时代中的社交网站等需要由用户生成内容的场景.从本地缓存扩展到分布式缓存后,关注重点从CPU.内存.缓存之间的数据传输速度差异也扩展到了 ...
- Docker OpenvSwitch 介绍 or 工作原理
Docker OpenvSwitch Network 介绍 什么是OpenVSwich OpenvSwich Network:属于第三方网络项目,可以理解为是一个标准的交换机协议. OpenvSwic ...
- xshell的优化和连接
远程连接linux ###远程连接工具---xshell/SecureCRT/Putty 商业版(收费) 家庭版(免费) 一.xshell进行优化 1.打开文件属性 2.设置终端类型问linux,输入 ...
- win10虚拟桌面使用方法-提高工作效率
任务栏右键 => 显示任务视图按钮 然后坐下角出现的任务视图按钮可以添加虚拟桌面 快捷键: win + ctrl + 左/右 切换桌面 win + tab 打开任务视图 win + ctrl + ...
- Mysql中 in or exists not exists not in区别 (网络整理)
in 和or区别: 如果in和or所在列有索引或者主键的话,or和in没啥差别,执行计划和执行时间都几乎一样. 如果in和or所在列没有 索引的话,性能差别就很大了.在没有索引的情况下,随着in或者o ...