(1)继承
类之间可以通过继承建立父子关系,子类可以继承父类的属性和方法,并可以添加自己的特定属性和方法。如下是一个简单示例:
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def study(self, subject):
print(f"{self.name} is studying {subject}.")
# 创建Student类的对象
student = Student("Charlie", 20, "12345")
student.greet() # 调用从父类继承的方法
student.study("Math") # 调用子类特有的方法
(2)、封装
封装也是类的三大特征之一。它允许将数据(属性)和操作(方法)捆绑在一起,同时隐藏对象的内部实现细节。这样可以防止外部直接访问对象的内部数据,只能通过对象提供的接口(方法)来访问和修改数据。如下是一个简单示例:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.__odometer_reading = 0 # 使用双下划线开头表示私有属性
def get_odometer_reading(self):
return self.__odometer_reading
def update_odometer(self, mileage):
if mileage >= self.__odometer_reading:
self.__odometer_reading = mileage
else:
print("You can't roll back an odometer!")
# 创建Car类的对象
my_car = Car("Toyota", "Corolla", 2022)
# 尝试直接访问私有属性(会报错)
# print(my_car.__odometer_reading)
# 通过公有方法访问和修改私有属性
print(my_car.get_odometer_reading()) # 输出: 0
my_car.update_odometer(100)
print(my_car.get_odometer_reading()) # 输出: 100
在这个示例中,__odometer_reading
属性被定义为私有属性,外部无法直接访问,只能通过公有方法get_odometer_reading()
和update_odometer()
来访问和修改属性的值,从而实现了封装。
(3)、多态
多态是类的三大特征的另外一个,它允许不同类的对象对同一个方法做出不同的响应。在多态中,同一个方法名可以在不同的类中有不同的实现,从而提高了代码的灵活性和可扩展性。
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
# 创建不同类的对象
dog = Dog()
cat = Cat()
# 调用相同的方法,但根据对象的类型会有不同的行为
print(dog.speak()) # 输出: Woof!
print(cat.speak()) # 输出: Meow!
在这个示例中,Animal
类有一个speak()
方法,而Dog
类和Cat
类分别继承Animal
类并重写了speak()
方法。当调用speak()
方法时,根据对象的具体类型,会执行对应类中的方法实现,实现了多态的特性。