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月前
|
Python
python-面向对象
python-面向对象
15 2
|
10天前
|
Python
Python中的面向对象
【5月更文挑战第4天】面向对象编程(OOP)是Python的核心,涉及类与对象、封装、继承和多态。类是对象的模板,对象则是类的实例。例如,`Person`类有`__init__`构造方法和`greet`方法。
15 3
|
15天前
|
算法 Python
Python面向对象oop编程(二)
Python面向对象oop编程(二)
|
26天前
|
数据安全/隐私保护 Python
python基础之面向对象
面向对象编程(OOP)是一种以对象为中心的编程范式,通过对象和类实现现实世界的抽象。对象是程序的基本单元,类是对象的模板。主要特点包括:封装,通过访问修饰符隐藏对象内部细节,保证数据安全;继承,子类继承父类属性和方法,实现代码复用;多态,同方法调用在不同对象上产生不同行为,增强灵活性。示例代码展示了Python中的类定义、封装、继承和多态概念。
|
29天前
|
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之面向对象基础
39 0