Python新手学习练习册---03对象的多态,封装与继承

Python新手学习练习册—03对象的多态,封装与继承

1.1 面向对象的编程核心概念

面向对象的编程(OOP:Object Oriented Programing)是一种编程的思想,把每一个对象为程序的基本单元,并且,每一个对象内含有相应的数据,和处理数据的函数。

1.2 面向对象的特性

  • 多态性(polymorphism):对不同对象使用同样的操作(调用同样名字的不同方法)。
  • 封装性(encapsulation):把对象当成一个整体来看待,对对象外部隐藏内部细节
  • 继承性(inheritance) :对象是可以派生和继承的。就好比交通工具(vehicle)可以派汽车(car)和公交车(bus)。汽车和公交车是独立存在的不同对象,但都继承了交通工具的所有属性。其中vehicle类为继承基类,car类和bus类为派生类。

1.3 例题题目

定义三个对象:

人:2个属性(名字,年龄)
定义str()方法,返回格式:Name: Age: 。
人继承俩个对象(学生,和教授)

学生:
继承人(Person类)的名字和年龄。
设置私有属性且外部可以访问:成绩(score)
设置方法myInfo() 打印如”我是学生,我23岁,我的名字是劫,我的成绩89分。”

教授:
继承人 (Person类)的名字和年龄。
设置私有属性且外部可以访问:学科(subject)
设置方法myInfo() 打印如”我是教授,我59岁,我的名字是安妮,我的学科是生物。”

分别实例化对象成三个实例
人名字叫Lee,24岁。
学生名字叫Zed,23岁,89分。
教授名字叫Annie,59岁,生物专业。

这里写图片描述

1.4 程序源码

class Person(object):     #对象的封装性:Person本身拥有这些数据,要访问这些数据就没必要从外面的函数访问,可以直接在Person类内部定义访问的函数,这样就把“数据”封装起来
    def __init__ (self,name,age):
        self.name=name
        self.age=age

    def __str__(self):
        return 'Name:%s Age:%s'%(self.name,self.age)

class Student(Person):                  #Student类是从Person类继承而来
    def __init__ (self,name,age,score):
        self.__score=score        # __  <----这个代表着属性私有化,外部无法访问
        super().__init__(name,age)
    def get_score(self):          #利用getter 访问私有属性
        return self.__score

    def myInfo(self):
        print('I am a student. I am %s years old. My name is %s and my grade is %s.'%(self.age,self.name,self.__score))


class Professor(Person):     
    def __init__(self,name,age,subject):
        self.__subject=subject
        super().__init__(name,age)

    def get_subject(self):
        return self.__subject

    def myInfo(self):
        print('I am a professor. I am %s years old. My name is %s and I teach %s.'%(self.age,self.name,self.__subject))


Lee=Person('lee',24)     #对象实例化
print(Lee)               #定义了__str__方法之后,会按照定义,打印出该对象的姓名和年龄。(具体可查看第七行)

Zed=Student('Zed',23,89)
print('Score:    %s'%Zed.get_score())
Zed.myInfo()

Annie=Professor('Annie',59,'BIO')
print('Subject:  %s'%Annie.get_subject())
Annie.myInfo()          #myInfo()现了面对对象编程的多态性

1.5 程序运行截图

这里写图片描述

1.6 后记

  • 对象内的函数称之为“方法“
  • 子类是不能访问父类的私有属性。
  • 若父类方法的功能不能满足你的需求,可在子类重写你父类的方法。

(欢迎指正)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值