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()函数,从而体现出多态的特性。