python面向对象(part3)--继承

学习笔记
开发工具:Spyder



继承

  • 定义

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

  • 优缺点

优点:①一种代码复用的方式。②以层次化的方式管理类。
缺点:耦合度高

  • 语法
class 子类(父类):
    def __init__(self, 参数列表):
        super().__init__(参数列表)
        self.自身实例变量 = 参数
  • 说明

①子类拥有父类的所有成员。
②子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类属性被正常创建。
③子类直接具有父类的成员(共性),还可以扩展新功能。

  • 作用

隔离客户端代码与功能的实现方式(隔离用和做)。

  • 多继承

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

例子1

代码:

class Person:
    def say(self):
        print("说")

class Student(Person):
    def study(self):
        print("学习")

class Teacher(Person):
    def teach(self):
        print("教")

s01 = Student()
s01.study()
# 可以直接使用父类成员
s01.say()

p02 = Person()
p02.say()
# 父类不能使用子类成员
# p02.study()

t03 = Teacher()
t03.teach()
# 不能使用"兄弟"类成员
# t03.study()

结果:

例子2(isinstance)

isinstance()方法可以鉴定一个对象是否兼容一个类

代码:

class Person:
    def say(self):
        print("说")

class Student(Person):
    def study(self):
        print("学习")

class Teacher(Person):
    def teach(self):
        print("教")


s01 = Student()
p02 = Person()

# 判断一个对象是否"兼容"一个类型
print(isinstance(s01,Person)) # True
print(isinstance(s01,Student)) # True
print(isinstance(s01,object)) # True
#一个类要么直接,要么间接的继承object类

print(isinstance(s01,Teacher)) # False
print(isinstance(p02,Student)) # False

结果:

例子3(issubclass)

issubclass()方法可以判断一个类是否为另一个类的子类

代码:

class Person:
    def say(self):
        print("说")

class Student(Person):
    def study(self):
        print("学习")

class Teacher(Person):
    def teach(self):
        print("教")




# 判断一个类是否"兼容"一个类型
print(issubclass(Student,Person)) # True
print(issubclass(Student,Teacher)) # False
print(issubclass(Student,(Teacher,Person))) # True
#(Teacher,Person)中只要有一个为Student类的父类,就会返回True,否则为False
print(issubclass(Student,Student)) # True

结果:

举个例子4(变量继承)

代码:

class Person:
    def __init__(self,name):
        self.name = name

class Student(Person):
    def __init__(self,name,score):
        # 通过函数,调用父类方法
        super().__init__(name)
        self.score = score

class Teacher(Person):
    def __init__(self,name,salary):
        super().__init__(name)
        self.salary = salary

s01 = Student("zs",100)
print(s01.score)
print(s01.name)

p02 = Person("ww")
print(p02.name)

结果:

内存图:

相关概念

父类(基类、超类)、子类(派生类)。
父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。
单继承:父类只有一个(例如 Java,C#)。
多继承:父类有多个(例如C++,Python)。
Object类:任何类都直接或间接继承自 object 类。

发布了116 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105128463