本文共 2466 字,大约阅读时间需要 8 分钟。
继承是一种关系,描述两个对象之间 "什么是什么" 的关系。在程序中,继承描述的是类和类之间的关系。
继承的基本语法:
class SubClass(Base): # 子类可以扩展或修改父类的功能 pass
抽象是一种表现形式,不具体、不清晰,具有模糊性和可见性。它的定义是将多个子类中相同的部分进行抽取,形成一个新的类,这个过程就是抽象的过程。
class Teacher(Person): def teaching(self): print('老师教学生,写代码') 属性查找顺序是:先找对象本身 > 类中 > 父类 > 父类的父类 > object。
派生类是指子类。子类通常会写一些新的代码,因此都是派生类。
覆盖(override)是指子类重写父类的属性或方法。
class MyList(list): def __init__(self, element_type): super().__init__(element_type) self.element_type = element_type def append(self, object): if type(object) == self.element_type: super(MyList, self).append(object) else: print('元素类型不正确') # 方式1: super(类名称, self).调用父类的属性或方法# 方式2: super().调用父类的属性或方法
class Person: def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age def say_hi(self): print('name:%s, gender:%s, age:%s' % (self.name, self.gender, self.age))class Student(Person): def __init__(self, name, gender, age, number): super().__init__(name, gender, age) self.number = number def say_hi(self): super().say_hi() print('number:%s' % self.number) 组合是一种关系,将一个对象作为另一个对象的属性(即 "什么有什么")。
为了代码的重用性,减少耦合度。
分析两个类的关系,确定是 "什么是什么" 的关系。
当两个类之间没有太大关系,完全不属于同一类时。
class Phone: def __init__(self, price, kind, color): self.price = price self.kind = kind self.color = color def call(self): print('正在呼叫XXX:') def send_msg(self): print('正在发送短信:')class Student: def __init__(self, name, gender, phone): self.name = name self.gender = gender self.phone = phone def show_info(self): print('name:%s, gender:%s' % (self.name, self.gender)) Python支持多继承,但多继承可能引发一些问题。
class A: passclass B(A): passclass C(A): passclass D(A): passprint(D.mro()) # [D, A, object]
class A: j = 1 passclass B(A): j = 2 passclass C(A): j = 3 passclass D(A): j = 4 passprint(D.j) # 4
当出现菱形继承时:
通过以上内容,我们可以清晰地理解继承的原理及其在实际开发中的应用。
转载地址:http://jtafk.baihongyu.com/