Python 作为一门面向对象的编程语言,它支持面向对象编程(OOP)的三大基本特征,这些特征使得 Python 强大而灵活,它们是:
- 封装(Encapsulation)
- 封装是面向对象编程的一种方式,它将数据(属性)和操作数据的代码(方法)捆绑在一起,形成称为“对象”的实体。这种机制可以隐藏内部实现细节,并且只暴露有限的接口与外部交互。
- 封装可以通过使用私有(private)或保护(protected)修饰符来实现,但是在 Python 中没有严格的访问控制,通常会使用单下划线 _ 或双下划线 __ 来表示属性是受保护的或私有的,但这并不是语言层面的强制,而是一种约定。
class Car:
def __init__(self, color, mileage):
self.color = color # 公开属性
self.__mileage = mileage # 私有属性
def drive(self, km):
self.__mileage += km
def get_mileage(self):
return self.__mileage
# 使用
my_car = Car('red', 0)
my_car.drive(10)
print(my_car.get_mileage()) # 正确的访问方式
- 继承(Inheritance)
- 继承是一种创建新类的方式,新创建的类称为子类(或派生类),它继承了一个或多个父类(或基类)的属性和方法。
- 继承不仅允许子类重用父类的代码,还支持多态。子类可以继承父类的所有属性和方法,同时还可以添加自己的属性和方法,或者重写父类的一些行为。
- 在 Python 中,所有的类都隐式继承自 object 类,这是所有类的基类。使用 super() 函数可以调用父类的方法。
在 Python 中,所有的类都隐式继承自 object 类,这是所有类的基类。使用 super() 函数可以调用父类的方法。
class Animal:
def __init__(self, species):
self.species = species
def make_sound(self):
pass
class Dog(Animal):
def __init__(self, name, species='Dog'):
super().__init__(species)
self.name = name
def make_sound(self):
return f"{self.name} says Woof!"
# 使用
buddy = Dog('Buddy')
print(buddy.make_sound()) # 输出: Buddy says Woof!
-
多态(Polymorphism)
- 多态是指不同类的对象对于相同的方法可以有不同的响应。换句话说,多态允许我们定义一个接口,并有多个形式(类)实现这个接口。
- 在 Python 中,多态是隐式的,因为 Python 是动态类型的语言,它不需要在编译时确定对象的类型,因此,任何对象都可以被用于任何期望某种类型的场合。
class Dog: def speak(self): return "Woof!" class Cat: def speak(self): return "Meow!" def animal_sound(animal): print(animal.speak()) # 使用 my_dog = Dog() my_cat = Cat() animal_sound(my_dog) # 输出: Woof! animal_sound(my_cat) # 输出: Meow!
在这个例子中,animal_sound
函数接受任何有 speak
方法的对象,不论是 Dog
类还是 Cat
类的实例,展示了多态的概念。
这三大特征是面向对象编程的基础,它们带来了代码的可重用性、可扩展性和可维护性等优点。