版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
- 封装
- 继承
- 多态
封装
含义:
- 将数据(属性)和行为(方法)包装到类对象中,在方法内部对属性进行操作,在类对象的外部调用方法。无需关心方法内部的具体实现细节,从而隔离了复杂度。
- 在类对象的内部通过访问控制把某些属性和方法隐藏起来,不允许在类对象外部直接访问,而是在类对象的内部对外提供公开的接口方法(如getter和setter)以访问隐藏的信息。这样,就对隐藏的信息进行了保护。
class Sudent(object):
def __init__(self):
self._score = 90
def get_score(self):
return self._score
def set_score(self, score):
if 0 <= score <=100:
self._score = score
else:
raise ValueError("成绩必须在0~100之间")
----------------------------------------------------------
>>>s = Student()
>>>s.get_score()
90
>>>s = Student()
>>>s.set_score(88)
>>>print(s.get_score())
88
继承
class Dog(object):
def eat(self):
print("吃饭")
def drink(self):
print("喝水")
def swin(self):
print("游泳")
----------------------------------------
class Bird(object):
def eat(self):
print("吃饭")
def drink(self):
print("喝水")
def fly(self):
print("飞翔")
-----------------------------------------
#继承
class Animal(object):
def eat(self):
print("吃饭")
def drink(self):
print("喝水")
class Dog(Animal):
def swin(self):
print("游泳")
class Bird(Animal):
def fly(self):
print("飞翔")
单继承
子类只有一个直接父类时
class ChildClass(parentClass):
pass
多继承
子类有多个直接父类时
class ChildClass(parentClass1,parentClass2,,,):
pass
子类会继承所有父类(包括所有直接父类和间接父类)的所有属性和方法
- 若子类对继承自父类的某个属性或方法不满意,可以在子类中对其进行重写从而提供自定义的实现,重写的方式为:在子类中定义与父类中同名的实行或方法(包括装饰器)。
- 子类重写父类的属性后,通过子类或其实例对象只能访问子类中重写后的属性,而无法再访问父类中被重写的属性。
- 子类重写父类的方法后,通过子类或其实例对象只能调用子类中u的方法,而无法再调用父类中被重写的方法。
父类中被重写的名为xxx的方法,在子类用些后的方法中 super(),xxx()进行调用
MRO
Method Resolution Order(方法解析顺序)
- 指的是对于一棵类继承树,当调用最底层类对象所对应实例对象的方法时,python解释器在类继承树上搜索方法的顺序。
- 对于一棵类继承树,可以调用最底层的方法mro()或访问最底层类对象的特殊属性
__mro__
,获取这棵类继承树的MRO - 在子类重写后的方法中通过super()调用父类中被重写的方法时,在父类中搜索方法的顺序基于以该子类为最底层类对象的类继承树的MRO
- 若想调用指定父类中被重写的方法时,可以给super()传入两个实参:super(a_type, obj),其中,a_type是个类对象,obj是实例对象,这样,被指定的父类是:obj所对应类对象的MRO中,a_type后面的那个类对象。