这是我参与更文挑战的第 24 天,活动详情查看: 更文挑战
1. 概述
Python 是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态
封装(隐藏)
隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只对外暴露“相关调用方法”
通过前面学习的私有属性、私有方法的方式,实现“封装”。Python追求简洁的语法,没有严格的语法级别的访问控制符,更多的是依靠程序猿自觉实现
继承
继承可以让子类具有父类的特性,提高了代码的重用性
从设计上是一种增量进化,原有父类设计不变的情况下,可以增加新的功能,或者改进已有的算法。
多态
多态是指同一个方法调用由于对象不同会产生不同的行为,生活中这样的例子比比皆是:同样是休息方法,人不同休息方法不同,比如小米休息是睡觉,小兵休息是玩游戏,小王休息是敲几行代码
2. 封装
2.1 封装介绍
封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部的操作和访问。
封装本质是一个种黑盒方式对于外界。只用对外界提供可以使用的接口,而不用关心其内部实现。
2.2 封装实操
class Animal:
def __init__(self):
self.__name = 'Tom' # 私有属性
self.age = 3 #普通属性
def __get_name(self): ##私有方法
print("名字是{0}".format(self.__name))
def get_age(self): #普通方法,可以调用私有属性和方法
print("{0} 的年龄是{1}岁".format(self.__name,self.age))
cat = Animal()
cat.get_age() #调用get_age()
cat._Animal__get_name()
复制代码
3. 继承
3.1 继承介绍
继承是面向对象程序设计的重要特征,也是实现代码复用的重要手段
如果一个新类继承自一个设计好的类,就直接具备了已有类的特征,就大大降低了工作难度。已有的类,我们称为父类或者基类,新的类,我们称为子类或者派生类。
Python支持多重继承,一个子类可以继承多个父类,继承的语法格式如下:
class 子类类名(父类1[,父类2,...]):
类体
复制代码
如果在类定义中没有指定父类,则默认父类是object类
Object是所有类的父类,里面定义了一些所有类共有的默认实现
定义子类时,必须在其构造函数中调用父类构造函数,格式为:父类名.init(self,参数列表)
子类重写了构造函数,则创建实例对象时,只会调用子类的构造函数,父类构造函数不再被使用
3.2 继承实操
class Person:
def __init__(self, name):
self.name = name
def say_name(self):
print("名字是:{0}".format(self.name))
class Student(Person):
def __init__(self, name, age):
Person.__init__(self, name) # 使用父类的构造函数
self.age = age
# Student->person->object类
print(Student.mro())
S1 = Student("Juejing", 24) # 创建实例对象S1
S1.say_name()
复制代码
4. 多态
4.1 多态介绍
多态是指向同一个方法调用由于对象不同可能产生不同的行为。
- 多态是方法的多态,属于没有多态
- 多态的存在有2个必要条件:继承和方法重写
4.2 多态实操
class Animal:
def eat_food(self):
print("投喂时间到了,开始进食")
class Dog(Animal): # 子类
def eat_food(self):
print("投喂时间到了,喜欢吃meat")
class Pig(Animal): # 子类
def eat_food(self):
print("投喂时间到了,喜欢吃Rice")
class Cat(Animal): # 子类
def eat_food(self):
print("投喂时间到了,喜欢吃fish")
def animalEat(a): # 定义一个方法animalEat
if isinstance(a,Animal):
a.eat_food() #一个方法,根据对象的不同,调用不同的方法
else:
print("没到时间,等待")
Cat = Cat()
animalEat(Cat)
Dog = Dog()
animalEat(Dog)
复制代码
总结
本期我们学习了面向对象的三个特征,了解和掌握了它们的基本概念及使用方法。
封装,使用私有属性和私有方法把细节隐藏起来,提高代码的可维护性
继承,子类继承父类,提高代码的复用率,减少冗余代码出现
多态,子类继承父类后,由于子类的需求重写父类的方法,适用在不同对象上变现不一样。
好啦,以上是本期的内容,欢迎大佬们评论区指正,下次见~