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.”的信息。


相关文章
|
2月前
|
Python
python-面向对象
python-面向对象
15 2
|
9天前
|
Python
Python中的面向对象
【5月更文挑战第4天】面向对象编程(OOP)是Python的核心,涉及类与对象、封装、继承和多态。类是对象的模板,对象则是类的实例。例如,`Person`类有`__init__`构造方法和`greet`方法。
15 3
|
14天前
|
算法 Python
Python面向对象oop编程(二)
Python面向对象oop编程(二)
|
24天前
|
数据安全/隐私保护 Python
python基础之面向对象
面向对象编程(OOP)是一种以对象为中心的编程范式,通过对象和类实现现实世界的抽象。对象是程序的基本单元,类是对象的模板。主要特点包括:封装,通过访问修饰符隐藏对象内部细节,保证数据安全;继承,子类继承父类属性和方法,实现代码复用;多态,同方法调用在不同对象上产生不同行为,增强灵活性。示例代码展示了Python中的类定义、封装、继承和多态概念。
|
28天前
|
Java 程序员 Python
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
|
1月前
|
开发者 Python
「Python系列」Python面向对象
Python 是一种面向对象的编程语言,它提供了类和对象的概念来组织和封装代码。面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它使用“对象”来设计软件和应用程序。对象是由数据和可以对这些数据执行的操作(即方法)组成的实体。
23 5
|
1月前
|
Python
python基础篇:python面向对象有哪些魔术方法?具体有什么用?
python基础篇:python面向对象有哪些魔术方法?具体有什么用?
18 1
|
2月前
|
Python
Python面向对象(九)
Python面向对象(九)
18 0
Python面向对象(九)
|
2月前
|
Python
07 Python面向对象的三大特点【封装、继承、多态】
07 Python面向对象的三大特点【封装、继承、多态】
7 0
|
2月前
|
Python
06 Python之面向对象基础
06 Python之面向对象基础
38 0