Python面向对象之继承

发布时间:2024年01月04日

【 一 】什么是继承

????????在面向对象中,继承是最常见的代码复用技术,它允许我们从一个类派生出一个新的类,并且新的类继承父类的属性和方法,我们将其称之为继承。

它指的是通过一个类(子类)去继承另一个类(父类)的属性和方法。

????????在继承关系中,子类可以继承父类的所有公共属性和方法,并且还可以添加自己独有的属性和方法。子类可以重写父类的方法,或者增加父类没有的方法,从而实现对父类的扩展。通过继承,我们可以减少代码的重复性,提高代码的可重用性和可维护性。

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()函数,我们可以检查一个类是否是另一个类的子类。在这个例子中,我们分别检查PandaHorse是否是Animal的子类,输出结果表明它们确实是。

????????此外,我们还可以直接访问类的__bases__属性来查看类的继承关系。__bases__属性是一个元组,包含了直接父类的引用。

????????通过检查继承关系,我们可以了解到类之间的层次关系,这对于理解代码的结构和设计是很有帮助的。

文章来源:https://blog.csdn.net/m0_58310590/article/details/135394553
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。