十、Python之面向对象--继承

语法角度讲

    继承方法

         代码:

class Parent:
    def p_fun(self):
        print("父类方法")


class Child(Parent):
    def c_fun(self):
        print("子类方法")


c = Child()
c.c_fun()
c.p_fun()

 

         说明:子类直接拥有父类的方法.

    内置函数

     isinstance(对象, 类型) 

     返回指定对象是否是某个类的对象。

     issubclass(类型,类型)

     返回指定类型是否属于某个类型。

print(isinstance(c, Child))  # True
print(isinstance(p, Parent))  # True
print(issubclass(Child, Parent))  # True

    继承数据

        代码:

class Parent:
    def __init__(self, color="red"):
        self.color = color



class Child(Parent):
    def __init__(self, weight):
        super().__init__()
        self.weight = weight



c = Child(50)
p = Parent()
print(c.__dict__)  # {'color': 'red', 'weight': 50}

         说明:子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类实例变量被正常创建。

    定义

   重用现有类的功能,并在此基础上进行扩展。

   说明:子类直接具有父类的成员(共性),还可以扩展新功能。

    优点

         一种代码复用的方式。

    缺点

         耦合度高:父类的变化,直接影响子类。

设计角度讲

    定义

        将相关类的共性进行抽象,统一概念,隔离变化。

    适用性

        多个类在概念上是一致的,且需要进行统一的处理。

    相关概念

        父类(基类、超类)、子类(派生类)。

        父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。

        单继承:父类只有一个(例如 Java,C#)。

        多继承:父类有多个(例如C++,Python)。

        Object类:任何类都直接或间接继承自 object 类。

    多继承

        一个子类继承两个或两个以上的基类,父类中的属性和方法同时被子类继承下来。

        同名方法的解析顺序(MRO, Method Resolution Order):

        类自身 --> 父类继承列表(由左至右)--> 再上层父类

       A

      / \

     /   \

    B     C

     \   /

      \ /

      D 

 

示例:

class Parent:
    def __init__(self, color="red"):
        self.color = color

    def p_fun(self):
        print("父类方法")


class Child(Parent):
    def __init__(self, weight):
        super().__init__()
        self.weight = weight

    def c_fun(self):
        print("子类方法")


p = Parent()
c = Child(50)
c.c_fun()  # 子类方法
c.p_fun()  # 父类方法
print(c.__dict__)  # {'color': 'red', 'weight': 50}
print(p.__dict__)  # {'color': 'red'}
发布了39 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiaotien/article/details/104370597
今日推荐