Python基础—面向对象(超详版)(三)

简介: Python基础—面向对象(超详版)

多态

7.1.png

Python多态是一种面向对象编程的概念,它指的是同一种行为或方法可以在不同的对象上产生不同的结果。换句话说,多态允许不同的对象对同一方法做出不同的响应。这种特性可以提高代码的灵活性和可扩展性,使程序更加易于维护和扩展。


在Python中,实现多态的方式主要有两种:


方法重写:方法重写是指在子类中重新定义父类的方法,从而实现对该方法的重载。这种方式可以让子类对父类的方法进行扩展或修改,从而实现多态。

方法重载:方法重载是指在同一类中定义多个同名的方法,但是它们的参数列表不同。这种方式可以让同一个方法名实现不同的功能,从而实现多态。

例如,假设有一个动物类Animal,其中定义了一个speak()方法,不同的动物可以根据自己的特点进行不同的叫声。我们可以定义一个Dog类和一个Cat类继承自Animal类,并且重写speak()方法,使得它们能够发出不同的叫声:

class Animal:
    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        print("汪汪汪!")
class Cat(Animal):
    def speak(self):
        print("喵喵喵!")

以上代码实现了多态,因为不同的对象(Dog和Cat)对相同的方法(speak())做出了不同的响应。在调用speak()方法时,可以根据对象的类型来决定调用哪个子类的方法,从而实现多态。


重写与调用

python重写

在Python中,子类可以重写(覆盖)父类的方法,以实现自己的功能。

重写方法时,需要注意以下几点:


1.子类的方法名与父类的方法名相同。

2.子类的方法参数与父类的方法参数相同。

3.子类的方法返回值类型与父类的方法返回值类型相同或者是父类方法返回值类型的子类型。


例如,下面的代码定义了一个名为Animal的父类和一个名为Dog的子类,子类重写了父类的方法:

class Animal:
    def make_sound(self):
        print("The animal makes a sound.")
class Dog(Animal):
    def make_sound(self):
        print("The dog barks.")
my_dog = Dog()
my_dog.make_sound()  # 输出"The dog barks."

7.2.png

在这个例子中,Animal类有一个名为make_sound()的方法,它输出“动物发出声音”的信息。Dog类继承了Animal类,并重写了make_sound()方法,使其输出“狗叫”的信息。在主程序中,我们创建了一个Dog对象my_dog,并调用了它的make_sound()方法,输出了“狗叫”的信息。


python调用

在Python中,调用父类的方法有两种方式:


1.使用super()函数调用父类的方法。

2.直接使用父类的类名调用父类的方法。


使用super()函数调用父类的方法是比较常用的方式,它可以自动识别出哪个父类的方法需要被调用。例如:

class Animal:
    def __init__(self, name):
        self.name = name
    def eat(self):
        print(self.name + " is eating.")
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
    def bark(self):
        print(self.name + " is barking.")
my_dog = Dog("Tom", "Husky")
my_dog.eat()  # 输出"Tom is eating."

7.3.png

在这个例子中,Animal类有一个名为eat()的方法,它输出动物正在吃东西的信息。Dog类继承了Animal类,并使用super()函数调用了父类的构造函数__init__(),以初始化name属性。在主程序中,我们创建了一个名为my_dog的Dog对象,并调用了它的eat()方法,输出了“Tom is eating.”的信息。


直接使用父类的类名调用父类的方法也是一种有效的方式。例如:


class Animal:
    def __init__(self, name):
        self.name = name
    def eat(self):
        print(self.name + " is eating.")
class Dog(Animal):
    def __init__(self, name, breed):
        Animal.__init__(self, name)
        self.breed = breed
    def bark(self):
        print(self.name + " is barking.")
my_dog = Dog("Tom", "Husky")
my_dog.eat()  # 输出"Tom is eating."

7.4.png

在这个例子中,Dog类的构造函数使用Animal类名和self参数调用了父类的构造函数__init__(),以初始化name属性。在主程序中,我们创建了一个名为my_dog的Dog对象,并调用了它的eat()方法,输出了“Tom is eating.”的信息。


super函数

在Python中,super()函数用于调用父类的方法。使用super()函数调用父类的方法时,可以不使用父类的类名,而是使用super()函数自动识别出需要调用的父类的方法。


super()函数的语法如下:

super([type[, object-or-type]])

其中,type是子类的类型,object-or-type是子类的对象或类型。如果只有一个参数,则默认为子类的类型。

例如,下面的代码定义了一个名为Animal的父类和一个名为Dog的子类,子类使用super()函数调用了父类的方法:

class Animal:
    def __init__(self, name):
        self.name = name
    def eat(self):
        print(self.name + " is eating.")
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
    def bark(self):
        print(self.name + " is barking.")
my_dog = Dog("Tom", "Husky")
my_dog.eat()  # 输出"Tom is eating."

7.5.png

Animal类有一个名为eat()的方法,它输出动物正在吃东西的信息。Dog类继承了Animal类,并使用super()函数调用了父类的构造函数__init__(),以初始化name属性。在主程序中,我们创建了一个名为my_dog的Dog对象,并调用了它的eat()方法,输出了“Tom is eating.”的信息。


相关文章
|
16天前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
58 2
|
1天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
2月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
32 0
|
4月前
|
Python
Python进阶第一篇(Python的面向对象)
Python进阶第一篇(Python的面向对象)
|
28天前
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
21 7
|
27天前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
5月前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
93 1
|
18天前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
15 0
|
5月前
|
人工智能 自然语言处理 开发者
Python基础教程——面向对象
Python基础教程——面向对象