面向对象编程
面向对象编程(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!