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

简介: Python基础—面向对象

父类与子类

在Python中,一个类可以从另一个类继承,被继承的类称为父类, 继承的类称为子类。


子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。

子类也可以重写父类的方法,从而改变其行为。


例如,下面的代码创建了一个Animal类作为父类,然后创建了一个Dog类作为子类:

class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
    def speak(self):
        return "Woof"
my_dog = Dog("Rufus")
print(my_dog.name)
print(my_dog.speak())

运行结果:

6.1.png在这个例子中,Animal类包含一个构造函数和一个抽象方法speak。Dog类继承了Animal类,并重写了speak方法。我们可以创建一个Dog对象并调用它的方法,它将返回“Woof”。

面向对象的特性

单继承与多继承

6.2.png

单继承

在Python中,单继承是指一个子类只能继承一个父类的属性和方法。Python中的类可以通过继承来扩展父类的功能,并添加自己的属性和方法。

下面是一个简单的Python单继承的例子:

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.")
dog = Dog("Tom", "Husky")
dog.eat()  # 输出"Tom is eating."
dog.bark()  # 输出"Tom is barking."

运行结果:

6.3.png

这段代码定义了一个Animal类和一个继承自Animal类的Dog类。Animal类有一个构造函数__init__()和一个eat()方法,eat()方法输出动物正在吃东西的信息。Dog类有一个构造函数__init__()和一个bark()方法,bark()方法输出狗正在叫的信息。


在Dog类的构造函数中,使用super()函数调用父类的构造函数,并传递name参数。然后,为Dog类添加一个名为breed的属性。


多继承

多继承是指一个类可以同时继承多个父类的特性和方法。


多继承的语法非常简单,只需要在定义类时在类名后面添加括号,括号中写上要继承的所有父类的名称,用逗号隔开即可。


例如,下面的代码定义了一个名为MyClass的类,它同时继承了父类A和B:

class A:
    def method1(self):
        print("Method 1 of A called.")
class B:
    def method2(self):
        print("Method 2 of B called.")
class MyClass(A, B):
    def method3(self):
        print("Method 3 of MyClass called.")
my_object = MyClass()
my_object.method1()  # 输出"Method 1 of A called."
my_object.method2()  # 输出"Method 2 of B called."
my_object.method3()  # 输出"Method 3 of MyClass called."

运行结果:

6.4.png

在这个例子中,我们定义了两个父类A和B,它们分别有一个方法method1和method2。然后,我们定义了一个名为MyClass的类,它同时继承了A和B两个父类,并添加了一个方法method3。


在主程序中,我们创建了一个MyClass对象,并调用了它的三个方法,它们分别输出了不同的信息。


多层继承

在Python中,一个类可以同时继承多个父类,这被称为多重继承。多重继承可以形成多层继承,即一个类继承了另一个类,而另一个类又继承了另一个类,以此类推。


例如,下面的代码定义了一个名为A的父类,一个名为B的子类,和一个名为C的子类,C类同时继承了A和B类:

class A:
    def method1(self):
        print("Method 1 of A called.")
class B:
    def method2(self):
        print("Method 2 of B called.")
class C(A, B):
    def method3(self):
        print("Method 3 of C called.")
my_object = C()
my_object.method1()  # 输出"Method 1 of A called."
my_object.method2()  # 输出"Method 2 of B called."
my_object.method3()  # 输出"Method 3 of C called."

6.5.png

在这个例子中,A类有一个名为method1()的方法,B类有一个名为method2()的方法,C类同时继承了A和B类,并添加了一个名为method3()的方法。在主程序中,我们创建了一个名为my_object的C对象,并调用了它的三个方法,它们分别输出了不同的信息。

封装

6.6.png

Python封装是一种面向对象编程的概念,它指的是将数据和方法封装在一个类中,并且对外部隐藏其实现细节,只暴露必要的接口供外部访问。


封装的目的是为了保护数据的完整性和安全性,防止外部程序意外修改或破坏数据,同时也提高了代码的可维护性和可读性。


Python中的封装可以通过以下方式实现:


使用私有变量和方法:在变量或方法名称前加上双下划线“__”即可将其定义为私有的,外部程序无法直接访问。需要注意的是,Python中的私有变量和方法并非完全无法访问,而是通过一定的方式进行访问。


使用属性:Python中的属性是一种特殊的方法,可以用来控制对类的成员变量的访问。通过属性,可以在访问成员变量时进行一些逻辑判断和处理,从而保护数据的完整性和安全性。


使用访问器和修改器:访问器和修改器分别是用来获取和设置私有变量的方法,可以在方法内部进行一些逻辑判断和处理,从而保护数据的完整性和安全性。


使用装饰器:装饰器是Python中一种特殊的语法结构,可以用来修改或扩展函数或类的功能。通过装饰器,可以在类或方法定义时对其进行修饰,从而实现封装的目的。


相关文章
|
2月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
79 2
|
12天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
4月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
44 0
|
2月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
6月前
|
Python
Python进阶第一篇(Python的面向对象)
Python进阶第一篇(Python的面向对象)
|
7月前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
115 1
|
3月前
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
27 7
|
3月前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
7月前
|
人工智能 自然语言处理 开发者
Python基础教程——面向对象
Python基础教程——面向对象