Python面向对象编程(一)

  • Post category:Python

Python面向对象编程(一)完整攻略

什么是面向对象编程?

面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和操作数据的方法放在同一个“对象”中,以对象作为最基本的程序单元,各个对象之间通过消息传递进行通信和协作。面向对象编程具有封装性、继承性和多态性等特点,可以帮助程序员更好地组织和管理代码,提高代码重用性和可维护性。

Python中的面向对象编程

Python是一门支持面向对象编程的语言,它的面向对象编程特点如下:

  • 一切皆为对象:在Python中,所有的数据类型都是对象,包括数字、字符串、列表、字典等等,它们都是某个类的实例。
  • 类和对象的定义:Python中定义一个类和定义一个函数的方式很相似,使用关键字class,而创建一个对象则是通过使用类名作为函数名,并加上括号来完成的。类中的属性和方法都是由“类名.属性”或“对象名.属性”调用的,方法调用也是通过“类名.方法”或“对象名.方法”进行的。
  • 继承和多态:Python中支持类的继承和多态,可以通过继承来扩展现有类的功能,可以通过多态来实现同一个方法名在不同对象中的不同实现。

Python中的类定义和对象创建

Python中定义一个类的基本语法如下:

class 类名:
    属性1 = 值1
    属性2 = 值2
    ...
    def 方法1(self, 参数1, 参数2, ...):
        语句1
        语句2
        ...

其中,class关键字用于定义一个类,类名可以是任意合法的Python标识符,类中可以包含属性和方法。属性用于存储数据,方法用于定义类的行为。方法的第一个参数总是self,代表对象本身,通过self可以访问对象的属性和方法。

创建一个对象的基本语法如下:

对象名 = 类名()

其中,通过类名后面加上括号和空参来创建一个空对象,然后将此对象赋值给一个变量名,从而实现创建对象的功能。

Python中的继承和多态

继承

Python中的类继承使用关键字“class 子类名(父类名):”来完成,如下所示:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, my name is {self.name}, I am {self.age} years old.")

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

    def say_hello(self):
        print(f"Hello, my name is {self.name}, I am {self.age} years old and my grade is {self.grade}.")

person1 = Person("Tom", 20)
student1 = Student("Jerry", 18, "Sophomore")

person1.say_hello()    # 输出 "Hello, my name is Tom, I am 20 years old."
student1.say_hello()   # 输出 "Hello, my name is Jerry, I am 18 years old and my grade is Sophomore."

在这个例子中,子类Student继承了父类Person的属性和方法,通过super()函数调用父类的构造函数,再添加了新的属性和方法。在子类Student中也重写了方法say_hello(),并且在新方法中扩展了父类的功能。

多态

Python中的多态是指同一种方法名,在不同对象中的实现是不同的。通过多态,可以体现出程序的灵活性和可拓展性。下列实例展示了多态的用法:

class Animal:
    def __init__(self, name):
        self.name = name
    def move(self):
        pass

class Cat(Animal):
    def move(self):
        print(f"{self.name} is jumping.")

class Dog(Animal):
    def move(self):
        print(f"{self.name} is running.")

def animal_move(animal):
    animal.move()

cat1 = Cat("Kitty")
dog1 = Dog("Lassie")

animal_move(cat1)    # 输出 "Kitty is jumping."
animal_move(dog1)    # 输出 "Lassie is running."

在这个例子中,定义了一个名为animal_move()的函数,它接受一个Animal类的对象作为参数,并调用这个对象的move()方法。然而,由于Cat和Dog类都继承了Animal类,它们都实现了move()方法,因此可以将Cat和Dog的实例作为参数传递给animal_move()函数,从而体现出多态的特性。