zoukankan      html  css  js  c++  java
  • Python 基础入门 6_2 类的继承与多态

    """
    类的继承:将类(父类)继承给另外一个类(子类),这样子类有了父类的属性与方法(私有属性/方法除外),
    同时也有自己的属性与方法,这种叫做继承,一个子类可以继承多个父类,一个父类也有可以有多个子类
    继承的作用:简化了代码,减少冗余;提高了代码的健壮性;提高了代码的安全性;是多态的前提
    缺点:耦合性高

    创建一个子类,跟创建一个类没有什么区别,格式如下
    class 类名([父类列表]) #一个类可以继承很多父类
    属性 #若该类和父类的属性名相同,以子类的为主
    方法 #若该类和父类的方法名相同,以子类的为主

    当一个子类实例化对象时,会默认将父类列表中的第一个父类无参实例化(哪怕这个父类没有无参构造函数),
    可以用super(子类名,self)的形式来表示这个父类的对象,但这个仅仅只能表示第一个父类的对象,多个父类可以直接父类名当作父类的对象
    子类.属性名/方法名调用:先去子类找属性名/方法名,没有则到第一个父类找属性名/方法名,直到最后一个父类的属性名/方法名都没有时,报错
    """
    class Father():
    age,var,var1= 44,"F变量","变量1"
    __money = "200w"

    def eat(self):
    print("father eat")
    def __work(self):
    print("work")
    def fun2(self):
    print("father fun")
    class Mether():
    age,var,var2= 40,"M变量","变量2"
    __money = "150w"

    def eat(self):
    print("Mether eat")
    def __work(self):
    print("Mether work")
    def fun1(self):
    print("Mether fun")

    class Son1(Father,Mether):
    age = 19
    def knowFatherAge(self):
    print("Son1 konw father's age is ", super(Son1, self).age)

    class Son2(Mether,Father):
    age = 17
    def knowFatherAge(self):
    print("Son2 konw father's age is ", Father.age)

    son1,son2= Son1(),Son2()
    print("son1.age:%d ,son2.age:%d" %(son1.age,son2.age))
    print("son1.var:%s , son2.var:%s" %(son1.var,son2.var))
    # print("son1.money:%d , son2.money:%d" %(son1.money,son2.money)) #报错,因为子类没有对应的属性,而父类对应的属性是私有的
    # print("son1.var3:%d , son2.var3:%d" %(son1.var3,son2.var3)) #报错,因为子类和父类都没有对应的属性

    son1.knowFatherAge(),son2.knowFatherAge()
    son1.eat(),son2.eat()
    # son1.work(),son2.work() #报错,因为子类没有对应的方法,而父类对应的方法是私有的
    # son1.fun3(),son2.fun3() #报错,因为子类和父类都没有对应的方法

    """
    多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
    (发送消息就是函数调用)

    多态存在的三个必要条件:
    1.要有继承
    2.方法要有重写
    3.要定义一个调用重写方法的方法

    多态的作用:一种调用方式,不同的执行效果(多态性)
    增加了程序的灵活性
    增加了程序额可扩展性
    """
    class A():
    var1 = 1
    def fun(self):
    print("A")
    def fun1(self,obj): #必要条件3
    obj.fun()

    class B(A): #必要条件1
    def fun(self): #必要条件2
    print("B")

    class C(A): #必要条件1
    def fun(self): #必要条件2
    print("C")

    a,b,c = A(),B(),C()
    a.fun1(a),a.fun1(b),a.fun1(c)
  • 相关阅读:
    ObjectiveC语法快速参考
    IIS网站全部显示无权访问需要登录
    如何让自己的网站尽快收录绍兴114导航
    asp.net的运行原理
    WPF学习视频资料
    Asp.net MVC3 自定义HtmlHelper控件
    Unity3D中C#和JS的方法互相調用
    对于冒泡算法的思考,大牛可一笑而过~~
    2013年年前瞻望与计划
    使用vs2010编辑Unity脚本,配置方法
  • 原文地址:https://www.cnblogs.com/hjlin/p/10629758.html
Copyright © 2011-2022 走看看