一文学会Python种面向对象设计的思想:OOP背后的理论思考

在我们探索 Python 中高级类特性的基础上,本文深入探讨了面向对象编程(OOP)的理论基础。我们将揭示关键的 OOP 概念,如继承、封装、多态、组合、抽象、聚合和关联,以及它们在 Python 中的实际应用。此外,我们还将探讨方法解析顺序(MRO)和关键设计模式,为你提供全面的理解,以增强你的 Python 编程技能。

OOP 基础

Python 中的面向对象编程建立在四个基本概念之上:抽象、继承、封装和多态。另外,还值得一提的是组合、抽象、聚合和关联。这些基本不仅是理论构造,它们也是塑造我们编写和组织 Python 代码的实用工具。

抽象

抽象是关于聚焦于某物的基本特性,而不是一个特定实例。在 OOP 中,这意味着专注于对象做什么,而不是它如何做到的。

这通常通过使用抽象类和方法来实现。抽象类是不能单独实例化的类,并且需要子类提供抽象方法的实现。

from abc import ABC, abstractmethod  
  
  
class AbstractVehicle(ABC):  
    @abstractmethod  
    def move(self):  
        pass  
  
  
class Car(AbstractVehicle):  
    def move(self):  
        print("Car is moving")  

# 抽象交通工具无法实例化,但实现了抽象方法的汽车可以。

继承

继承是一种机制,新的类(称为子类)从现有类(父类)中派生属性和行为(方法)。这个概念对于创建层次结构和在类之间共享代码至关重要。

class Animal:  
    def __init__(self, name):  
        self.name = name  
  
    def speak(self):  
        pass  
  
  
class Dog(Animal):  
    def speak(self):  
        return f"{
     
     self.name} says Woof!"  
  
  
class Cat(Animal):  
    def speak(self):  
        return f"{
     
     self.name} says Meow!"  
  
  
dog = Dog("Buddy")  
cat = Cat("Whiskers")  
print(dog.speak())  # Output: Buddy says Woof!  
print(cat.speak())  # Output: Whiskers says Meow!

最好使用继承来建模明确的“是一个”关系。当“有一个”关系更合适时,请避免使用它,因为这可能导致不恰当的耦合。要注意深度继承层次结构,因为它们可能变得难以管理和理解。当你发现自己在强行适应时,更喜欢组合而不是继承。

封装

封装通过仅暴露选定的方法和属性来保护对象的内部状态。这降低了意外干扰和错误的风险。

class Account:  
    def __init__(self, id, balance=0):  
        self.__id = id        # Private attribute  
        self.__balance = balance  
  
    def deposit(self, amount):  
        if amount > 0:  
            self.__balance += amount  
  
    def withdraw(self, amount):  
        if 0 < amount <= self.__balance:  
            self.__balance -= amount  
            return amount  
        return "Insufficient balance"  
  
    def get_balance(self):  
        return self.__balance  
  
  
account = Account(1, 1000)  
account.deposit(500)  
print(account.get_balance())  # 1500  
account.withdraw(200)  
print(account.get_balance())  # 1300

总是使用 getter 和 setter 方法来访问和修改私有属性。除非必要,否则不要暴露内部状态。这种方法不仅保护了数据,而且使将来对实现的更改变得更容易。

多态

多态使不同类的对象能够被视为一个共同超类的对象。它的核心是使用单一接口表示不同的底层形式(数据类型)。

class Rectangle:  
    def draw(self):  
        return "绘制一个矩形"  
  
class Circle:  
    def draw(self):  
        return 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值