面向对象编程(OOP)是一种编程范式,强调将数据和操作数据的函数封装在一起,并通过对象来组织代码。Python 是一种面向对象的语言,它通过类和对象来实现 OOP。下面详细介绍 Python 中的面向对象编程,包括类和对象、属性和方法、继承与多态、魔法方法,以及封装和私有化属性。
class
关键字定义。示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
# 创建对象
person = Person("Alice", 30)
person.greet() # 输出: Hello, my name is Alice and I am 30 years old.
示例:
class Car:
# 类属性
wheels = 4
def __init__(self, make, model):
# 实例属性
self.make = make
self.model = model
# 实例方法
def display_info(self):
print(f"Make: {self.make}, Model: {self.model}, Wheels: {Car.wheels}")
# 创建对象
car = Car("Toyota", "Corolla")
car.display_info() # 输出: Make: Toyota, Model: Corolla, Wheels: 4
示例:
class Animal:
def make_sound(self):
raise NotImplementedError("Subclasses must implement this method")
class Dog(Animal):
def make_sound(self):
return "Woof!"
class Cat(Animal):
def make_sound(self):
return "Meow!"
def animal_sound(animal):
print(animal.make_sound())
# 使用多态
dog = Dog()
cat = Cat()
animal_sound(dog) # 输出: Woof!
animal_sound(cat) # 输出: Meow!
魔法方法(Magic Methods)是特殊的函数,通常以双下划线开头和结尾,用于实现 Python 的内置操作符和功能。常见的魔法方法包括:
__init__
:构造方法,在对象创建时调用。__str__
:定义对象的字符串表示。__repr__
:定义对象的正式字符串表示。__add__
:定义对象的加法操作。__eq__
:定义对象的相等比较。示例:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Point({self.x}, {self.y})"
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
# 创建对象
p1 = Point(2, 3)
p2 = Point(4, 5)
# 使用魔法方法
print(p1) # 输出: Point(2, 3)
p3 = p1 + p2
print(p3) # 输出: Point(6, 8)
__
),可以将其标记为私有,外部代码不能直接访问。注意,Python 的私有化是基于名称修饰的,不能完全阻止访问。示例:
class BankAccount:
def __init__(self, account_number, balance):
self.__account_number = account_number # 私有属性
self.__balance = balance # 私有属性
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def withdraw(self, amount):
if amount > 0 and amount <= self.__balance:
self.__balance -= amount
def get_balance(self):
return self.__balance
# 创建对象
account = BankAccount("123456", 1000)
account.deposit(500)
account.withdraw(200)
# 访问私有属性
print(account.get_balance()) # 输出: 1300
# 不能直接访问私有属性
# print(account.__balance) # 会抛出 AttributeError
Python 的面向对象编程提供了一种组织代码和数据的强大方式。通过类和对象的定义、属性和方法的使用、继承与多态的实现、魔法方法的应用,以及封装和私有化的技术,可以编写出更加模块化、可维护和可扩展的代码。掌握这些概念和技术,将帮助你在 Python 编程中更好地应用面向对象的原则。