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':'64',
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()


原文地址:https://www.cnblogs.com/wxp997/p/7979118.html