Python教程(20)——python面向对象编程基本概念

发布时间 2024-01-07 09:55:12作者: 一点sir

面向对象(Object-oriented)是一种常用的程序设计思想,它以对象作为程序的基本单元,将数据和操作封装在一起,通过对象之间的交互来实现程序的功能。

在面向对象编程中,将问题抽象成对象,而对象可以拥有属性(数据)和方法(操作)。对象可以被看作是现实世界中的实体或概念,具有某种特定的状态和行为。通过封装、继承和多态等机制,可以实现代码的模块化、复用和灵活性。

上面的解释是非常的抽象,可能对于很多初学者来说,不是很好理解,但是没关系,后面学习过这章节之后,你就大概能理解了。,我们先来了解Python面向对象的一些基本概念,以便可以很好的掌握面向对象编程。

给出一段小代码,然后逐个来分析Python面向对象编程中的一些的基本概念。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say_hello(self):
        print(f"你好,我是{self.name},今年{self.age}岁。")

person1 = Person("一点", 30)
person1.say_hello()  # 输出:你好,我是一点,今年30岁。
person2 = Person("Alittle", 40)
person2.say_hello()  # 输出:你好,我是Alittle,今年40岁。

类和对象

类(Class)是一种抽象的概念,用于定义具有相同属性和方法的对象的集合。对象(Object)是类的一个具体实例,通过类可以创建多个对象。
上面的例子我们创建一个Person类,然后person1是创建的具体的实例对象,可以创建多个,person1person2都是创建的对象。

初始化方法

初始化方法(Constructor)是类中一个特殊的方法,它在创建对象时自动调用。在初始化方法中,可以对对象的属性进行初始化。在Python中,初始化方法的名称为__init__
上面的__init__(self, name, age)也就是初始化方法,也可以称为构造函数,其中参数self不可省略。

属性和方法

属性(Attribute)是对象的特征或数据,方法(Method)是对象的行为或操作。对象的属性保存对象的状态,而方法定义了对象的行为。
上面例子的nameage就是定义的属性,say_hello就是定义的方法。更加具体的相关介绍后面会写。

self关键字

在类中定义方法时,方法的第一个参数必须是selfself表示对象本身,在方法内可以通过self访问对象的属性和方法。

继承

继承(Inheritance)是面向对象编程中的一个重要概念,它允许一个类从另一个类继承属性和方法。通过继承,子类可以重用父类的代码,并可以在子类中添加新的属性和方法。在Python中通过在类定的时候加括号的方式来实现继承class Student(Person)

class Student(Person):
    def __init__(self, name, age, school):
        super().__init__(name, age)  # 调用父类的初始化方法
        self.school = school
    
    def say_hello(self):
        super().say_hello()  # 调用父类的方法
        print(f"我在{self.school}上学。")

student1 = Student("一点的女儿", 5, "幼儿园")
student1.say_hello()

这个例子输出:

你好,我是一点的女儿,今年5岁。
我在幼儿园上学。

多态

多态(Polymorphism)是指一个对象可以引用不同类的实例,从而实现不同类的方法可以具有相同的行为。这可以通过继承和方法重写来实现。

class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("汪汪汪!")

class Cat(Animal):
    def make_sound(self):
        print("喵喵喵!")

def make_animal_sound(animal):
    animal.make_sound()

dog = Dog()
cat = Cat()
make_animal_sound(dog)  # 输出:汪汪汪!
make_animal_sound(cat)  # 输出:喵喵喵!

我们可以传入不同的对象(DogCat),但是函数 make_animal_sound 的调用方式却是一样的。
这种多态性使得我们可以编写更加灵活和可扩展的代码。当我们拓展程序中的新功能时,只需要创建新的派生类并重写相应的方法即可,而不用修改已有的代码。这大大降低了代码的耦合性,提高了代码的可维护性和可扩展性。

需要注意的是,面向对象编程不仅仅是这些基本概念的运用,还包括一些设计原则和模式等,用于指导和优化面向对象的软件开发。这些概念和原则一起构成了面向对象编程的完整体系。

更多精彩内容,请关注同名公众:一点sir(alittle-sir)