python自动化运维学习第十四天--类的属性和方法总结

类的属性

类属性(公有属性)
类的私有属性
对象的公有属性
对象的私有属性
内置属性
函数的局部变量
全局变量

#!/usr/bin/python
# -*- coding:utf-8 -*-
class MyClass(object):
    var1 = '类属性,类的公有属性 var1'
    __var2 = '类的私有属性 __var2'

    def fun1(self):
        self.var3 = '对象的公有属性 var3'
        self.__var4 = '对象的私有属性 __var4'
        var5 = '函数的局部变量 var5'

    def fun2(self):
        print self.var1    #fun2方法调用类的公有属性
        print self.__var2  #fun2方法调用类的私有方法
        print self.var3    #fun2方法调用fun1的对象公有属性,需要先执行fun1方法才能访问
        print self.__var4  #fun2方法调用fun1的对象私有属性,需要先执行fun1方法才能访问
#        print var5        #不能访问
        
mc = MyClass()
print mc.var1              #类的公有属性
print mc._MyClass__var2    #类的私有属性,不建议这样使用
mc.fun1()
print mc.var3              #对象的公有属性
#print mc.__var4           #不能输出对象的私有属性
#print mc.var5             #不能输出方法的局部变量
mc1 = MyClass()
#print mc1.var3            #不能访问,没有调用fun1方法
print MyClass.var1         #直接使用类来方法公有属性
mc.fun2()                  #调用fun2方法
print mc.__dict__          #调用内置属性
类的方法

公有方法
私有方法
类方法
静态方法
内置方法

#!/usr/bin/python
# -*- coding: utf-8 -*-
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):
        print self.name,
        print "类方法"

    @staticmethod         #静态方法装饰器
    def staticFun():
        print MyClass.name,   #使用类名引用类属性
        print "静态方法"

mc = MyClass()
mc.fun1()                 #调用公有方法
#mc.__fun2()              #不能调用,只能在类内调用
MyClass.classFun()        #调用类方法
MyClass.staticFun()       #调用静态方法

例子
编写一个memcached的启动脚本

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys,os
import subprocess import Popen, PIPE

class Process(object):
    '''memcached rc script '''
    def __init__(self, name, program, args, workdir):      #name程序名字,program程序路径,args参数,workdir存放pid目录
        self.name = name
        self.program = program
        self.args = args
        self.workdir = workdir

    def _init(self):                 #初始化方法
        '''创建pid文件存放的目录/var/tmp/memcached'''
        if not os.path.exists(self.workdir)
            os.mkdir(self.workdir)    #创建pid所在目录
            os.chdir(self.workdir)    #进入workdir目录

    def _pidFile(self):
        '''pid文件/var/tmp/memcached/memcached.pid'''
        return os.path.join(self.workdir, "%s.pid" % self.name)   #返回一个pid文件的绝对路径

    def _writePid(self):
        if self.pid:
            with open(self._pidFile(), 'w') as fw:    #打开pid文件
                fw.write(str(self.pid))   #写入pid号

    def _getPid(self):
        p = Popen(['pidof', self.name], stdout=PIPE)       #执行pidof命令
        pid = p.stdout.read().strip()    #得到pid
        return pid

    def start(self):
        pid = self._getPid()
        if pid:      #判断程序是否已经启动
            print "%s is running..." % self.name
            sys.exit()
        self._init()
        cmd = self.program + ' ' + self.args
        p = Popen(cmd, stdout=PIPE, shell=True)     #执行运行命令
        self.pid = p.pid
        self._writePid()      #执行写入pid方法
        print "%s start Sucessful" % self.name

    def stop(self):
        pid = self._getPid()
        if pid:
            os.kill(int(pid), 15)     #kill掉pid
            if os.path.exists(self._pidFile()):
                os.remove(self._pidFile())    #删除存放pid的文件
            print "%s is stopped" % self.name

    def restart(self):
        self.stop()
        self.start()

    def status(self):
        pid = self._getPid()
        if pid:
            print "%s is running" % self.name
        else:
            print "%s is not running" % self.name

    def help(self):
        print "Usage: %s {start|stop|restart|status}" % __file__
 
def main():
    name = 'memcached'
    prog = '/usr/bin/memcached'      #memcached程序的路径
    args = '-u nobody -p 11211 -c 1024 -m 64'   #-u启动的用户名,-p端口号,-c最大连接数,-m缓存大小
    wd = '/var/tmp/memcached'
    pm = Process(name = name,
                 program = prog,
                 args = args,
                 workdir = wd)
    try:
        cmd = sys.argv[1]            #抓取脚本没有参数的错误
    except IndexError, e:
        print "Option error"
        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()

猜你喜欢

转载自blog.csdn.net/wang035759984/article/details/84862165