跳到主要内容

面向对象编程

面向对象编程(OOP)是 Python 的核心特性之一,它通过类(Class)和对象(Object)组织代码,提高代码的复用性和可维护性。

类和实例

  • 类(Class): 类是定义对象的模板(属性和方法)
  • 实例(Instance):实例是根据类创建的具体对象
class Dog:
# 类属性(所有实例共享)
species = "Canis familiaris"

# 初始化方法(构造函数)
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age

# 实例方法
def bark(self):
return f"{self.name} says Woof!"

# 创建实例
dog1 = Dog("Buddy", 3)
dog2 = Dog("Milo", 5)

print(dog1.bark()) # 输出: Buddy says Woof!
print(dog2.species) # 输出: Canis familiaris

访问限制

Python 通过命名约定实现封装,控制属性和方法的访问权限:

  • 公有成员:默认,例如命名为 name
  • 受保护成员:约定为内部使用,例如命名为 _name
  • 私有成员:无法直接访问,例如命名为 __name
class BankAccount:
def __init__(self, name, balance, phone):
self.name = name # 公共属性
self._phone = phone # 受保护属性
self.__balance = balance # 私有属性

# 公有方法访问私有属性
def get_balance(self):
return self.__balance

def get_phone(self):
return self._phone

def deposit(self, amount):
print(self._phone)
if amount > 0:
self.__balance += amount

# 创建实例
account = BankAccount('admin', '13211112222', 1000)
print(account.name) # 'admin'
print(account.get_phone()) # 13211112222
print(account.get_balance()) # 1000

print(account._phone) # 访问受保护属性,不报错
print(account.__balance) # 访问私有属性,会报错

继承

子类可以继承父类(一个或者多个)的属性和方法,并可以扩展或重写。

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

def speak(self):
raise NotImplementedError("子类必须实现此方法")

class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"

class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"

# 创建子类实例
cat = Cat("Whiskers")
dog = Dog("Buddy")

print(cat.speak()) # 输出: Whiskers says Meow!
print(dog.speak()) # 输出: Buddy says Woof!