已经讲到面向对象编程十三讲(继承、方法、super()、多重继承、多态),通读笔记和老师的课堂回放,似会而会的,敲了几遍代码,整理了学习记录。
继承简介:继承是⼀种创建新类的⽅式,如果⼦类需要复⽤⽗类的属性或者⽅法时,就可以使⽤继承。⼦类也可以提供⾃⼰的属性和⽅法。
继承时面向对象的三大特性之一
通过继承我们可以获取其他类的属性和方法
提高了类的复用性,让类与类之间产生了关系
在定义类的时候,我们可以在类名的括号中指定当前类的父类(超类、基类)
举例:
class GrandFather(object):
def sleep(self):
print("GrandFather sleep")
class Father(GrandFather):
def eat(self):
print("Father eat")
def drink(self):
print("Father drink")
class Son(Father):
def study_py(self):
print("Son stupy python")
s = Son()
s.study_py()
s.eat()
s.sleep()
方法的重写
方法的重写(覆盖,override)如果子类中有和父类重名的方法,则通过子类去调用该方法时,会调用的时子类里面的方法,这个特点我们称之为方法的重写
当我们调用一个对象的方法时,会优先去当前的对象寻找是否有该方法,如果有则直接调用;如果没有,则去啊当前对象的父类中去寻找该方法,如果父类中有该方法,则直接调用父类中的方法;如果没有,则去父类中的父类去寻找该方法,一次类推,直到找到object,如果没有则报错。
举例:
classGrandFather(object):
def sleep(self):
print("GrandFathersleep")
class Father(GrandFather):
defeat(self):
print("Fathereat")
def drink(self):
print("Father drink")
classSon(Father):
def study_py(self):
print("Son stupy python")
def sleep(self):
print("Sonsleep")
s = Son()
s.study_py()
s.eat()
s.sleep() # Son sleep
Super()
通过super调用父类方法时,可以动态的获取当前类的父类不需要传递self
举例:
def__init__(self,name,age):
#self,_name = name
# animal,__init__(self,name)
super().__init__(name)
self._age = age
__init__()⽅法
__init__()⽅法叫初始化⽅法,也称为构造⽅法。在创建对象时,会⾃动执⾏该⽅法,为对象的属性设置初始值。举例如
class Student(object):
def __init__(self,name,age):
self.name = name
self.age = age
def info(self):
print(self.name,self.age)
ls = Student("赵四",20)
ls.info()
多重继承
一个类指定多个父类
如果多个父类有重名的方法先去找一个,在去找第二个…….
多太
多态时面向对象的三大特性之一
动态语⾔调⽤实例⽅法时不检查类型,只要⽅法存在,参数正确,就可以调⽤。这就是动态语⾔的“鸭⼦类型”,它并不要求严格的继承体系,⼀个对象只要“看起来像鸭⼦,⾛起路来像鸭⼦”,那它就可以被看做是鸭⼦。
class A:
def__init__(self,name):
self._name = name
def__len__(self):
return100
@prpperty
def name(self):
总结:
继承 深度优先 先从⾃⼰找 找不到则往⽗类找
重写(防⽌执⾏⽗类中的⽅法)
self永远是执⾏该⽅法的调⽤者
super(⼦类,self).⽗类中的⽅法(arg) 或者 ⽗类名.⽗类中的⽅法(self,arg)
__init__⽅法也会继承,同实例⽅法⼀致
多态:定义时的类型和运⾏时的类型不⼀样,此时就成为多态。
封装、继承、多态面向对象三大特性
封装确保对象中的数据安全
继承保证了对象的可拓展性
多态保证了程序的灵活性。