面向对象
编程的一种方法
一些皆对象
面向过程和面向对象编程
面向过程编程:函数式编程。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阶段性复习六的更多相关文章

  1. Python并发复习1 - 多线程

    一.基本概念 程序: 指令集,静态, 进程: 当程序运行时,会创建进程,是操作系统资源分配的基本单位 线程: 进程的基本执行单元,每个进程至少包含一个线程,是任务调度和执行的基本单位 > 进程和 ...

  2. python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍

    目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...

  3. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  4. Python学习第六课

    Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...

  5. Python爬虫利器六之PyQuery的用法

    前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有 ...

  6. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  7. Python爬虫入门六之Cookie的使用

    大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...

  8. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  9. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

随机推荐

  1. typescript 01 认识ts和ts的类型

    看ITYING ts专辑(前三集总结) TypeScript 是 Javascript 的超级,遵循最新的 ES6.Es5 规范.TypeScript 扩展了 JavaScript 的语法.TypeS ...

  2. centos共享目录

    使用VirtualBOX自带的共享文件夹功能 运行环境:  - 宿主机:windows 10  - 虚拟机:CentOS 7(我当初是按照Ubuntu环境下的教程弄的,所以其他Linux版本也可以参考 ...

  3. unittest改写传参方法

    Python主要讲究简洁简单使用,所以它不像junit一样支持参数化测试,需要改装一下也可以传参.直接上代码实例 import unittest class ParametrizedTestCase( ...

  4. 4.Python3运算符

    4.1算数运算符(以下假设变量a为10,变量b为21) 实例操作: print(3 + 5) #数字3与5相加 print(3 - 5) #数字3与5相减 print(3 * 5) #数字3与5相乘 ...

  5. Hbase伪分布式安装

    前面的文章已经讲过hadoop伪分布式安装,这里直接介绍hbase伪分布式安装. 1. 下载hbase 版本hbase 1.2.6 2. 解压hbase 3. 修改hbase-env.sh 新增如下内 ...

  6. Unable to construct api.Node object for kubelet: can't get ip address of node master.example.com: lookup master.example.com on : no such host

    openshift首页进不去 启动openshift时报的错,大意是: 无法为kubelet构造api.Node对象:无法获取节点master.example.com的IP地址: 所以就联想到新装的c ...

  7. webform ajax 异步请求

    第一种就是对应方法的请求 虽然对应方法 但还是会刷新页面 webform是基于事件的 每次请求都会出发pageload <script> $(function () { $("# ...

  8. Technical poem

    Apartment Good apartment be booked the second it bring to market. low product sold to many man, and ...

  9. laravel中empty(),is_null() 以及isEmpty()

    PHP中 empty() empty() 函数用于检查一个变量是否为空. if(empty($result->order)){ //操作 } is_null() is_null() 函数用于检测 ...

  10. Bootstrap3基础 text-uppercase/lowercase/capitalize 字母大写、小写和首字母大写

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...