1,派生与继承:
定义一个学生类Student,包含姓名Name,性别gender,年龄age,还包含所学专业major,所在系别dept,那么就不必要定义student类,只要从已经定义的person的类派生
class Person:
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def show(self,end="\n"):
print(self.name,self.gender,self.age,end=end)
class Student(Person):
def __init__(self,name,gender,age,major,dept,):
Person.__init__(self,name,gender,age)
self.major=major
self.dept=dept
def show(self):
Person.show(self,'')
print(self.major,self.dept)
s=Student("james","male","20","software","computer")
s.show()
2.继承类构造函数:
Person.__init__(self,name,gender,age)
通过类名称直接调用Person的__init__函数,并提供所需要的4个参数。继承类是不会自动调用基类的构造函数的,必须显示调用;
3.属性方法继承
class supcls():
x=3
y=4 #属性
def m(self):
x=33
self.x=333
self.y=444
self.z=555
def n(self):
return self.x,self.y,self.z
class childcls(supcls):
y=supcls.y+1 #通过类名访问父类属性
def n(self):
self.z=5555
print(childcls.x) #父类属性,搜索到父类名称空间
print(childcls.y) #子类自身属性,搜索到子类名称空间
#print(childcls.z) #错误,子类和父类中都没有该属性
3.属性方法的继承:
class Person :
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age
def show(self,end='\n'):
print(self.name,self.gender,self.age,end=end)
def display(self,end='\n'):
print(self.name,self.gender,self.age,end=end)
class Student(Person):
def __init__(self,name,gender,age,major,dept):
Person.__init__(self,name,gender,age)
self.major=major
self.dept=dept
def show(self):
Person.show(self,'')
print(self.major,self.dept)
def setName(self,name):
self.name=name
s=Student("james","male","20","software","computer")
s.show()
s.display()
s.setName("robert")
s.show()
s.display()
多态:
class Animal(object):
def move(self):
pass
class Rabbit(Animal):
def move(self):
print("兔子蹦蹦跳跳")
class Snail(Animal):
def move(self):
print("蜗牛缓慢爬行")
def test(obj):
obj.move()
rabbit=Rabbit()
test(rabbit)
snail=Snail()
test(snail)
运行结果:
课堂案例:
我的日期时间类:
class Mydate:
__months=[0,31,28,31,30,31,30,31,30,31,30,31]
def __init__(self,y,m,d):
if y<0:
raise Exception("无效年份")
if m<1 | m>12:
raise Exception("无效月份")
if y%400==0 | y%4==0 & y%100!=0:
Mydate.__months[2]=29
else :
Mydate.__months[2]=28
if d<1 | d>Mydate.__months[m]:
raise Exception("无效日期")
self.year=y
self.month=m
self.day=d
def show(self,end='\n'):
print("%04d-%02d-%02d"%(self.year,self.month,self.day),end=end)
class MydateTime(Mydate):
def __init__(self,y,m,d,h,mi,s):
Mydate.__init__(self,y,m,d)
if h<0 | h>23 | mi<59 | s<0 |s>59:
raise Exception("无效时间")
self.hour=h
self.minute=mi
self.second=s
def show(self):
Mydate.show(self,end=' ')
print("%04d:%02d:%02d"%(self.hour,self.minute,self.second))
try:
d=MydateTime(2017,6,7,23,12,34)
d.show()
except Exception as e :
print(e)