paython——类与对象



python的继承和重写


在python中继承的特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类(子类即当前类)中找到对应的方法,它才开始到基类(父类)中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
4:由上面的关系,可以进行方法的重写,在子类中重写父类方法。

如果在继承元组中列了一个以上的类,那么它就被称作”多重继承” 。


抽象类

1.Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助abc模块。ABC是Abstract Base Class的缩写。

2.abc.abstractmethod(function)

表明抽象方法的生成器

class C:
    __metaclass__ = ABCMeta
    @abstractmethod
    def my_abstract_method(self, ...):
3.abc.abstractproperty([fget[,fset[,fdel[,doc]]]])

表明一个抽象属性

class C:
    __metaclass__ = ABCMeta
    @abstractproperty
    def my_abstract_property(self):
        ...

上例只是只读属性,如果是读写属性,可以如下:

class C:
    __metaclass__ = ABCMeta
    def getx(self): ...
    def setx(self, value): ...
    x = abstractproperty(getx, setx)

父类定义,子类实现

示例:

class MyBaseClass(object):
    __metaclass__ = abc.ABCMeta            

    @abc.abstractmethod
    def execute(self):
        pass
my_base = MyBaseCLass()    ##报错,抽象类不能示例化对象

class MyClass(MyBaseClass):
    def execute(self):
        print 'xx'
my_class = MyClass()

my_class.execute()



两个参数

*args**kwargs

当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。

使用示例:

def funtion(*args,**kwargs):
    print args
    print kwargs

funtion(1,2,3,a=1,b=2)

注释快捷键:ctrl+/
global
:在函数内想使用一个全局变量就要在变量名前加global

__init__(self):初始化方法



python的cmd模块

Python中的cmd模块类型提供了一个创建命令行解析器的框架。简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法。默认情况下,它使用readline来进行交互式操作、命令行编辑和命令完成。

 

使用cmd创建的命令行解释器循环读取输入的所有行并且解析它们,然后发送命令给一个合适的命令处理器。输入行为解析成两个部分:命令和参数。如果用户输入cmd param,它解释成命令cmd和参数param,然后使用param作为参数调用do_cmd方法。如果do_cmd命令处理器返回真,那么程序会干净的退出,否则会继续等待下一个命令的输入。

 

关于Cmd的使用,通常都是创建自己的类型,继承于CMd,然后使用Cmd的方法来实现自己的功能,一个超简单的例子:

  1. from cmd import Cmd  
  2. import sys  
  3.   
  4. class CmdTest(Cmd):  
  5.       
  6.     def __init__(self):            #初始基础类方法  
  7.         Cmd.__init__(self)  
  8.           
  9.     def help_hello(self):  
  10.         print("输入hello 参数,将执行o_hello方法,输出参数值")  
  11.       
  12.     def do_hello(self,line):  
  13.         print("do_hello:",line)  
  14.       
  15.     def help_exit(self):          #以help_*开头的为帮助  
  16.         print("输入exit退出程序")  
  17.       
  18.     def do_exit(self,line):       #以do_*开头为命令  
  19.         print("Exit:",line)  
  20.         sys.exit()  
  21.           
  22. if __name__ =="__main__":  
  23.     cmd=CmdTest()  
  24.     cmd.cmdloop()  

运行的结果:


 

介绍Cmd一些常用的方法

(1)cmdloop():类似与Tkinter的mainloop,运行Cmd解析器;

(2)onecmd(str):读取输入,并进行处理,通常不需要重载该函数,而是使用更加具体的do_command来执行特定的命名;

(3)emptyline():当输入空行时调用该方法;

(4)default(line):当无法识别输入的command时调用该方法;

(5)completedefault(text,line,begidx,endidx):如果不存在针对的complete_*()方法,那么会调用该函数

(6)precmd(line):命令line解析之前被调用该方法;

(7)postcmd(stop,line):命令line解析之后被调用该方法;

(8)preloop():cmdloop()运行之前调用该方法;

(9)postloop():cmdloop()退出之后调用该方法;


例题:实现四则表达式

import cmd

  1 #!/usr/bin/env python
  2 import cmd
  3 #coding=utf-8
  4 class Cal(cmd.Cmd):
  5     promtp = ">>"
  6     def do_exit(self,line):
  7         """
  8         exit system
  9         """
 10         print line
 11         return True
 12     def execute(self,line,o):
 13         l_s = line.split(' ')
 14         a = int(l_s[0])
 15         b = int(l_s[1])
 16         if o == 'add':
 17             return a + b
 18         if o == 'sub':
 19             return a - b
 20     def do_add(self,line):
 21         print self.execute(line,'add')
 22     def do_sub(self,line):
 23         print self.execute(line,'sub')

 24 Cal().cmdloop()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值