• 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()


  • 相关阅读:
    《大道至简》第一章读后感,java伪代码形式
    chm文件内容无法显示的问题
    Windows下.py文件右键菜单的增删
    在ArchLinux中安装VMWare Workstation
    笔记本屏幕锁定
    pacman 日志摘要
    数据库事务特性和隔离级别
    数据库范式以及ER图
    《剑指offer》算法题第四天
    《剑指offer》算法题第二天
  • 原文地址:https://www.cnblogs.com/wxp997/p/7979118.html
Copyright © 2020-2023  润新知