2020-08-03面向对象编程十三讲(继承、方法、super()、多重继承、多态)

已经讲到面向对象编程十三讲(继承、方法、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__⽅法也会继承,同实例⽅法⼀致

多态:定义时的类型和运⾏时的类型不⼀样,此时就成为多态。

封装、继承、多态面向对象三大特性

封装确保对象中的数据安全

继承保证了对象的可拓展性

多态保证了程序的灵活性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容