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 程序源码
扫描二维码关注公众号,回复:
3115609 查看本文章
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 后记
- 对象内的函数称之为“方法“
- 子类是不能访问父类的私有属性。
- 若父类方法的功能不能满足你的需求,可在子类重写你父类的方法。
(欢迎指正)