python-类的继承和多态

(1)继承

import time
class users:
    username=' '
    def __init__(self,uname):
        self.username=uname
        print('(构造函数;'+self.username+')')#显示用户名
    def dispusername(self):
        print(self.username)
class userlogin(users):
    def __init__(self,uname,lastlogintime):
        users.__init__(self,uname)#调用父类的构造函数
        self.lastlogintime=lastlogintime
    def displogintime(self):
        print('登陆时间:'+self.lastlogintime)
now=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))#获取当前时间
my1=userlogin('admin',now)#声明三个对象
my2=userlogin('lee',now)
my3=userlogin('zhang',now)
my1.dispusername()#分别调用父类和子类函数
my1.displogintime()
my2.dispusername()
my2.displogintime()
my3.dispusername()
my3.displogintime()

在这里插入代码片

python-类的继承和多态
(2)定义抽象类
python通过类库abc实现抽象类,因此在定义抽象类之前需要从类库abc导入ABCMeta类和abstractmethod()
form abc import ABCMeta,abstractmethod
在定义抽象类时,只需在类定义中增加如下代码:metaclass=ABCMeta
如:
class myabc(object):
metaclass=ABCMeta
在抽象类里可以定义抽象方法,需加上@abstractmethod
如:
class myabc(object):
metaclass=ABCMeta
@abstractmethod
def abcmethod(self):
pass
(3)多态:指在抽象类中定义的一个方法可以其子类中重新实现,不同子类中的实现方法也不相同

from abc import ABCMeta,abstractmethod
class shape(object):
    __metaclass__ = ABCMeta
    def __init__(self):
        self.color='black'
    @abstractmethod
    def draw(self):pass
class circle(shape):
    def __init__(self,x,y,r):
        self.x=x
        self.y=y
        self.r=r
    def draw(self):
        print('draw circle:(%d,%d,%d)'%(self.x,self.y,self.r))
class line(shape):
    def __init__(self,x1,y1,x2,y2):
        self.x1=x1
        self.x2=x2
        self.y1=y1
        self.y2=y2
    def draw(self):
        print('draw line:(%d,%d,%d,%d)'%(self.x1,self.y1,self.x2,self.y2))
c=circle(10,10,5)
c.draw()
l=line(10,10,20,20)
l.draw()