(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()
在这里插入代码片
(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()