????????在面向对象中,继承是最常见的代码复用技术,它允许我们从一个类派生出一个新的类,并且新的类继承父类的属性和方法,我们将其称之为继承。
它指的是通过一个类(子类)去继承另一个类(父类)的属性和方法。
????????在继承关系中,子类可以继承父类的所有公共属性和方法,并且还可以添加自己独有的属性和方法。子类可以重写父类的方法,或者增加父类没有的方法,从而实现对父类的扩展。通过继承,我们可以减少代码的重复性,提高代码的可重用性和可维护性。
在python
中,我们还是使用class
来定义一个类,并且要通过其指定父类,来完成继承,例如:
class a:
pass
class b(a):
pass
这个就是一种继承:
class Dog(Mao):
def __init__(self,name):
super().__init__(name)
def tian(self):
print(f"{self.name} I NOT KNOK")
# 创建对象并调用方法
mao = Mao('mao')
mao.tian()
# mao ni hao!
dog = Dog('xuenarui')
dog.tian()
# xuenarui I NOT KNOK
????????在子类的构造方法中,我们使用super().__init__(name)
调用父类的构造方法来初始化父类的属性。在子类中,我们重写了父类的tian()
方法,并提供了自己的实现。
????????通过上诉例子我们可以看到父类和子类的不同输出结果。子类继承了父类的属性和方法,并且可以根据需要重写父类的方法来实现自己的行为。这就是继承的基本示例。
????????多态是面向对象编程中的一个重要概念,它允许不同的对象对相同的消息做出不同的响应。多态性通过继承和方法重写实现。
????????当一个类继承自另一个类,并且重写了父类的方法时,我们可以通过父类的引用指向子类的对象,从而实现多态。
示例:
# 定义父类 Animal
class Animal:
def __init__(self,name):
self.name = name
def tian(self):
print(f'{self.name} ni hao!')
# maoda ni hao!
# 定义子类 Panda
class Panda(Animal):
def tian(self):
return 'china'
# 定义子类 Horse
class Horse(Animal):
def tian(self):
return 'chinese'
x = Animal('maoda')
x2 = Panda('tianda')
x3 = Horse('baida')
print(x.tian())
print(x2.tian())
print(x3.tian())
# None
# china
# chinese
????????一个是继承,一个是多态。继承是面向对象的特性之一,目的是实现代码复用,继承的类,我们称之为子类,被继承的类,我们称之为父类,子类会继承父类所有的属性和方法,但是有个特殊的,就是不会继承父类的私有属性。
要查看类之间的继承关系,你可以使用issubclass()
内置函数或者访问类的__bases__
属性。
示例:
class Animal:
def __init__(self,name):
self.name = name
def tian(self):
print(f'{self.name} ni hao!')
# maoda ni hao!
# 定义子类 Panda
class Panda(Animal):
def tian(self):
return 'china'
# 定义子类 Horse
class Horse(Animal):
def tian(self):
return 'chinese'
# 检查继承关系
print(issubclass(Panda, Animal)) # True
print(issubclass(Horse, Animal)) # True
print(issubclass(Horse, Panda)) # False
# 查看类的继承关系
print(Panda.__bases__)
# (<class '__main__.Animal'>,)
print(Horse.__bases__)
# (<class '__main__.Animal'>,)
????????通过issubclass()
函数,我们可以检查一个类是否是另一个类的子类。在这个例子中,我们分别检查Panda和Horse
是否是Animal
的子类,输出结果表明它们确实是。
????????此外,我们还可以直接访问类的__bases__
属性来查看类的继承关系。__bases__
属性是一个元组,包含了直接父类的引用。
????????通过检查继承关系,我们可以了解到类之间的层次关系,这对于理解代码的结构和设计是很有帮助的。