2018-12-6 10:15:32
3.2 类的属性总结
- 类的公有属性
- 类的私有属性
- 对象的公有属性
- 对象的私有属性
- 内置属性
- 函数的局部变量
- 全局变量
#!/usr/bin/python
#coding:utf8
var6 = '全局变量'
class MyClass(object):
var1 = '类的公有属性 var1'
__var2 = '类的私有属性 __var2'
def fun1(self):#类的方法属性
self.var3 = '对象的公有属性 var3'
self.__var4 = '对象的私有属性 __var4'
var5 = '函数的局部变量 var5'
global var5 #申明为全局变量之后才能被外部调用
def fun2(self):
print self.var1
print self.__var2
print self.var3
print self.__var4
#print var5 #局部变量无法其他函数方法被调用global之后才能被调用
print var5
print var6
mc = MyClass()
mc.fun1()
print '*' * 50
mc.fun2()
#类的内置方法
print MyClass.__dict__
print '#' * 20
#对象的内置方法
print mc.__dict__
-------------------------结果如下----------------------------
c1.py:12: SyntaxWarning: name 'var5' is assigned to before global declaration
global var5
**************************************************
类的公有属性 var1
类的私有属性 __var2
对象的公有属性 var3
对象的私有属性 __var4
函数的局部变量 var5
全局变量
{'__module__': '__main__', 'var1': '/xe7/xb1/xbb/xe7/x9a/x84/xe5/x85/xac/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 var1', 'fun2': <function fun2 at 0x7fafbf0f0938>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, 'fun1': <function fun1 at 0x7fafbf0f08c0>, '_MyClass__var2': '/xe7/xb1/xbb/xe7/x9a/x84/xe7/xa7/x81/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 __var2', '__doc__': None}
####################
{'_MyClass__var4': '/xe5/xaf/xb9/xe8/xb1/xa1/xe7/x9a/x84/xe7/xa7/x81/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 __var4', 'var3': '/xe5/xaf/xb9/xe8/xb1/xa1/xe7/x9a/x84/xe5/x85/xac/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 var3'}
3.3 类的方法总结
- 公有方法
- 私有方法
- 类方法
- 静态方法
- 内置方法
#!/usr/bin/python
#coding:utf8
class MyClass(object):
name = 'Test'
def __init__(self):
self.fun1()
self.__fun2()
self.classFun()
self.staticFun()
def fun1(self):
print self.name,
print '我是公有方法'
#self.__fun2()
def __fun2(self):
#私有方法外部不能直接调用,但是可以在内部调用
print self.name,
print '我是私有方法'
@classmethod
def classFun(self):
#类里面的方法不能直接被类调用,需要装饰器classmethod修饰之后才能被类调用
print self.name,
print '我是类方法'
@staticmethod
def staticFun():
#静态方法因为没有self参数,调用变量时需要加MyClass类名
print MyClass.name,
print '我是静态方法'
print '#'*10 +'内置方法调用结果' + '#'*10
mc = MyClass()
print '*'*10 +'手动调用结果' + '*'*10
#MyClass.fun1() 该方式无法执行会报错
mc.fun1()
MyClass.classFun()
MyClass.staticFun()
--------------------结果如下---------------------
##########内置方法调用结果##########
Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法
**********手动调用结果**********
Test 我是公有方法
Test 我是类方法
Test 我是静态方法
3.5 memcached启动脚本
#!/usr/bin/python
#conding:utf8
import sys
from subprocess import Popen,PIPE
import os
class Process(object):
'''memcached rc scrip'''
def __init__(self,name,program,args,workdir):
'''初始化需要用的变量'''
self.name = name
self.program = program
self.args = args
self.workdir = workdir
def _init(self):
'''/var/tmp/memcached 判断pid文件及路径是否存在'''
if not os.path.exists(self.workdir):
os.mkdir(self.workdir)
os.chdir(self.workdir)
def _pidFile(self):
'''/var/tmp/memcached/memcached.pid 定义pid文件路径'''
return os.path.join(self.workdir,'%s.pid' %self.name)
def _writePid(self):
'''将pid写入文件中'''
if self.pid:
with open(self._pidFile(),'w') as fd:
fd.write(str(self.pid))
def start(self):
'''start启动方法'''
self._init()
cmd = self.program + '' + self.args
p = Popen(cmd, stdout=PIPE,shell=True)
self.pid = p.pid
self._writePid()
print '/033[1;32m%s start Sucessful/033[0m' %self.name
def _getPid(self):
p = Popen(['pidof',self.name],stdout=PIPE)
self.pid = p.stdout.read().strip()
return self.pid
def stop(self):
'''stop停止方法'''
pid = self._getPid()
if pid:
os.kill(int(pid),15)
if os.path.exists(self._pidFile()):
os.remove(self._pidFile())
print '/033[1;32m%s is stoped/033[0m' %self.name
else:
print '/033[1;32m%s is not running... /033[0m' %self.name
def restart(self):
'''restart重启方法'''
self.stop()
self.start()
def status(self):
'''status查看状态'''
pid = self._getPid()
if pid:
print '/033[1;32m%s is running... /033[0m' %self.name
else:
print '/033[1;32m%s is not running... /033[0m' %self.name
def help(self):
'''帮助'''
print "/033[1;33mUsage start|stop|status|restart /033[0m "
def main():
'''主函数执行'''
name = 'memcached'
prog = '/usr/bin/memcached'
args = ' -u nobody -p 11211 -c 1024 -m 64'
wd = '/var/tmp/memcached'
pm = Process(name = name,
program = prog,
args = args,
workdir = wd)
try:
cmd = sys.argv[1]
except IndexError, e:
pm.help()
sys.exit()
if cmd == 'start':
pm.start()
elif cmd == 'stop':
pm.stop()
elif cmd == 'restart':
pm.restart()
elif cmd == 'status':
pm.status()
else:
pm.help()
if __name__ == "__main__":
main()