类的继承和多态举例,继承是指子类具有父类的所有功能,而多态是指子类有不同与父类的功能。以及类的封装,封装后使得外部无法访问。

本文通过Python代码展示了面向对象的三大特性:继承(如BoyStudent从Student类继承)、多态(子类重写父类方法实现多态性)以及封装(通过下划线隐藏类属性)。示例中详细解释了如何实例化对象、调用属性和方法,并讨论了如何在子类中扩展和修改父类功能。
摘要由CSDN通过智能技术生成
class Student:#创建student学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
class BoyStudent:#创建男学生student学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
class GirlStudent:#创建女的student学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用类的属性年龄
girl = GirlStudent(9,'mali',9)#girl对象实例化
print(girl.age)#调用类的属性年龄
stu = Student(8,'lulu',8)#stu对象实例化
print(stu.age)#调用类的属性年龄

输出打印结果

以上三个类都有一样的属性:

boystudent继承student类:

class Student:#创建学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
    def test(self):#定义方法
        print(1)
class BoyStudent(Student):#Boy类继承student类
    ...#三个点省略定义的属性
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用student类的方法test

多态:

1.重载:子类继承父类,子类和父类的方法相同了,子类方法优先,覆盖了父类方法,

class Student:#创建学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
    def test(self):#定义方法
        print(1)
class BoyStudent(Student):#Boy类继承student类
    def test(self):#三个点省略定义的属性
        print(2)
class GirlStudent(Student):#Boy类继承student类
    def test(self):#子类定义新的方法
        print(3)

boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用子类student的方法test
girl = GirlStudent(11,'lele',13)#girl对象实例化
print(girl.age)#调用student类的属性年龄
girl.test()#调用子类girl的方法test

 2.子类和父类的相同方法,要同时打印出来

class Student:#创建学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
    def test(self):#定义方法
        print(1)
class BoyStudent(Student):#Boy类继承student类
    def test(self):#三个点省略定义的属性
        super().test()#super可以直接调用父类student里的test方法,打印出父类的方法结果1
        print(2)
class GirlStudent(Student):#Boy类继承student类
    def test(self):#子类定义新的方法
        print(3)

boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用子类student的方法test
girl = GirlStudent(11,'lele',13)#girl对象实例化
print(girl.age)#调用student类的属性年龄
girl.test()#调用子类girl的方法test

添加这一句super().test.就可以调用父类里的test方法了

3.子类函数继承了父类函数 ,特殊情况下,需要修改子类函数的属性,这个例子是增加了成绩属性。

class Student:#创建学生类
    def __init__(self,age,name,number):
        self.age = age
        self.name = name
        self.number = number
    def test(self):#定义方法
        print(1)
class BoyStudent(Student):#Boy类继承student类
    def test(self):#三个点省略定义的属性
        super().test()#super可以直接调用父类student里的test方法,打印出父类的方法结果1
        print(2)
class GirlStudent(Student):#Boy类继承student类
    def __init__(self,age,name,number,grade_800):#重新编写girl构造函数,增加一个grade_800属性
        super(GirlStudent,self).__init__(age,name,number)#用super来继承父函数
        self.grade_800 = grade_800
    def test(self):#子类定义新的方法
        print(3)
    def show(self):#新方法show,输出子类的各个属性值
        print(self.age)
        print(self.name)
        print(self.number)
        print(self.grade_800)


girl = GirlStudent(11,'lele',13,'A+')#girl对象实例化
girl.test()#调用girstudent方法test
girl.show()#调用girstudent方法show

 

三:封装

        封装了类的属性后,外部无法调用类的属性

没有封装前:

class Dog:#定义一个狗类
    def __init__(self,name,age,brand):
        self.name = name#定义狗的名字属性
        self.age = age#定义狗的年龄属性
        self.brand = brand#定义狗的种类属性
    def eat(self,food):#定义eat方法
        print(f'{self.name}吃{food}')
    def introduce(self):#定义introduce方法
        print(f'我是一只{self.brand},我叫{self.name},今年{self.age}岁')
dog1 = Dog('骨头',10,'茶杯犬')#实例化对象dog1
dog2 = Dog('杀手',5,'中华田园犬')#实例化对象dog2
print(dog1.name,dog1.age,dog1.brand)#打印出类的属性
print(dog2.name,dog2.age,dog2.brand)#打印出类的属性
#dog1.introduce()

打印结果:

 

 dog更改为伪装后的_Dog__age后,外部又可以继续访问:

 

class Dog:#定义一个狗类
    def __init__(self,name,age,brand):
        self.name = name#定义狗的名字属性
        self.__age = age#定义狗的年龄属性
        self.brand = brand#定义狗的种类属性
    def eat(self,food):#定义eat方法
        print(f'{self.name}吃{food}')
    def introduce(self):#定义introduce方法
        print(f'我是一只{self.brand},我叫{self.name},今年{self._Dog__age}岁')
dog1 = Dog('骨头',10,'茶杯犬')#实例化对象dog1
dog2 = Dog('杀手',5,'中华田园犬')#实例化对象dog2
print(dog1.name,dog1._Dog__age,dog1.brand)#打印出类的属性
print(dog2.name,dog2._Dog__age,dog2.brand)#打印出类的属性
dog1.introduce()
print(dir(dog1))

显示的结果:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值