python类的继承(上课笔记)

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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值