1.类的属性总结

复习 类的属性总结 类的方法总结_第1张图片



脚本练习:

2.打印各种类的属性

(1)访问类的公有属性

复习 类的属性总结 类的方法总结_第2张图片

执行结果:

blob.png


(2)访问类的私有属性

复习 类的属性总结 类的方法总结_第3张图片

执行结果:

blob.png

不建议使用这种方式访问类的私有属性,只是为了测试。


(3)访问对象的公有属性

复习 类的属性总结 类的方法总结_第4张图片

执行结果:

blob.png

结论:必须要先调用方法,才能使用方法里面的属性。


(4)访问对象的私有属性

复习 类的属性总结 类的方法总结_第5张图片

执行结果:

复习 类的属性总结 类的方法总结_第6张图片

结果:这样访问是不行的,不能再类外面访问对象的私有属性。


(5)访问函数的局部变量

复习 类的属性总结 类的方法总结_第7张图片

执行结果:

复习 类的属性总结 类的方法总结_第8张图片

结果:也不能用这种方法访问函数的局部变量。


总结:类的公有属性,可以通过对象访问

   类的私有属性,也可以通过对象来访问

   对象的公有属性,要先调用方法,才能通过对象来访问。

   对象的私有属性,通过对象不能访问

   函数的局部变量,在类的外面,通过对象也不能访问。


下面我们通过类来访问这些属性:

(1)访问公有属性

复习 类的属性总结 类的方法总结_第9张图片

执行脚本:

blob.png

没问题


(2)通过类访问私有属性:

复习 类的属性总结 类的方法总结_第10张图片

执行脚本:

blob.png

不可以访问


(3)通过类访问对象的公有属性

复习 类的属性总结 类的方法总结_第11张图片

执行脚本:

blob.png

不能访问。

说明:对象的属性,只能通过对象来访问

复习 类的属性总结 类的方法总结_第12张图片

执行脚本:

blob.png

可以执行

补充:对象的属性和类的属性的区别

①脚本中位置不一样

②类的属性是定义在方法外

③对象的属性是对应在方法里



测试这些属性在类的内部使用:

(1)在内部访问类的公有、私有属性

复习 类的属性总结 类的方法总结_第13张图片

执行结果:

blob.png

公有、私有属性都可以被访问。


(2)在类内部访问对象的公有属性

复习 类的属性总结 类的方法总结_第14张图片


执行结果

复习 类的属性总结 类的方法总结_第15张图片


(3)在类内部访问对象的私有属性

复习 类的属性总结 类的方法总结_第16张图片

执行结果:

复习 类的属性总结 类的方法总结_第17张图片

也可以访问对象的私有属性。


(4)在方法内调用对象的私有属性和函数局部变量

复习 类的属性总结 类的方法总结_第18张图片

执行结果:

blob.png

可以访问到

var5可以再fun1()里面被访问,不能再fun2()中被访问,除非把var5定义为全局变量,全局变量是在类的外部定义的。

如下图所示:

复习 类的属性总结 类的方法总结_第19张图片


(5)访问类的内置属性

复习 类的属性总结 类的方法总结_第20张图片

执行结果:

复习 类的属性总结 类的方法总结_第21张图片


2.类的方法总结

(1)定义方法

复习 类的属性总结 类的方法总结_第22张图片

(2)调用一下,查看这些方法可以在什么地方被调用

①调用公有方法L:

blob.png

执行脚本:

blob.png

②调用私有方法:

blob.png

执行脚本:

复习 类的属性总结 类的方法总结_第23张图片

如图,不能被调用,私有方法只能在类的内部被调用。


③调用类方法:

复习 类的属性总结 类的方法总结_第24张图片

在类方法上面加上“装饰器”,有了装饰器,表示这个方法可以被类来调用;

调用方法如下:

blob.png

执行脚本:

blob.png

可以执行,要加上装饰器才可以被类调用。


④调用静态方法

静态方法也是通过类来调用的,静态调用不能通过self,所以改成类来调用name,如下:

复习 类的属性总结 类的方法总结_第25张图片

调用方法:

blob.png

执行结果:

blob.png



练习

memcache 的启动脚本:

import sys
import os
from subprocess import Popen, PIPE

class Process(object):
    '''memcached rc script'''
    args = {'USER':'memcached',
            'PORT':'11211',
            'MAXCONN':1024,
            'CACHESIZE':64,
            'OPTIONS':''}

    def __init__(self, name, program, workdir):
        self.name = name
        self.program = program
        self.workdir = workdir

    def _init(self):
        '''/var/run/memcached'''
        if not os.path.exists(self.workdir):
            os.mkdir(self.workdir)
            os.chdir(self.workdir)

    def _pidFile(self):
        '''/var/run/memcached/memcached.pid'''
        return os.path.join(self.workdir,"%s.pid" % self.name)

    def _getPid(self):
        p = Popen(['pidof',self.name],stdout=PIPE)
        return p.stdout.read().strip()

    def _writePid(self):
        pid = self._getPid
        if self.pid:
            with open(self._pidFile(),'w') as fd:
                fd.write(str(self.pid))
        return pid

    def _readConf(self,f):
        with open(f) as fd:
            lines = fd.readlines()
            return dict([i.strip().replace('"','').split('=') for i in lines])

    def _parseArgs(self):
        conf = self._readConf('/etc/sysconfig/memcached')
        if 'USER' in conf:
            self.args['USER'] = conf['USER']
        if 'PORT' in conf:
            self.args['PORT'] = conf['PORT']
        if 'MAXCONN' in conf:
            self.args['MAXCONN'] = conf['MAXCONN']
        if 'CACHESIZE' in conf:
            self.args['CACHESIZE'] = conf['CACHESIZE']
        options = ['-u', self.args['USER'],
                   '-p', self.args['PORT'],
                   '-m', self.args['CACHESIZE'],
                   '-c', self.args['MAXCONN']]
        os.system("chown %s %s" % (self.args['USER'],self.workdir))
        return options

    def start(self):
        pid = self._getPid()
        if pid:
            print "%s is runnig..." % self.name
            sys.exit()
        self._init()
        cmd = [self.program] + self._parseArgs() + ['-d','-P',self._pidFile()]
        print cmd
        p = Popen(cmd, stdout = PIPE)
        #self.pid = p.pid
        #self._writePid()
        print "%s start sucessful" % self.name

    def stop(self):
        pid = self._getPid()
        print "kill the pid %s" % pid
        if pid:
            os.kill(int(pid),15)
            if os.path.exists(self._pidFile()):
                os.remove(self._pidFile())
            print "%s is stopped" % self.name

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

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

    def help():
        print "Usage: %s {start|stop|status|restart}" % __file__

def main():
    #pm = Process()
    name = 'memcached'
    program = '/usr/bin/memcached'
    workdir = '/var/run/memcached'
    pm = Process(name = name,program = program,workdir = workdir)
    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()