乐趣区

关于人工智能:43-封装

封装是面向对象编程的另一个重要概念。它指的是将对象的属性和办法包装在一个类中,从而暗藏它们的实现细节。封装的次要长处是进步了代码的可维护性、可重用性和安全性。在本节中,咱们将探讨封装的基本概念,并通过实例代码展现如何在 Python 中实现封装。

4.3.1 公有属性和公有办法

在 Python 中,能够应用双下划线(__)前缀来定义公有属性和公有办法。这示意这些属性和办法只能在类外部拜访,而不能在类内部拜访。以下是一个示例:

class BankAccount:
    def __init__(self, account_number, balance):
        self.__account_number = account_number
        self.__balance = balance

    def deposit(self, amount):
        self.__balance += amount

    def withdraw(self, amount):
        if self.__is_sufficient_balance(amount):
            self.__balance -= amount
        else:
            print("Insufficient balance!")

    def get_balance(self):
        return self.__balance

    def __is_sufficient_balance(self, amount):
        return self.__balance >= amount

account = BankAccount("123456", 500)
account.deposit(200)
account.withdraw(100)
print(account.get_balance())  # 输入后果:600

在这个示例中,咱们定义了一个名为 BankAccount 的类,它具备两个公有属性 __account_number 和 __balance,以及一个公有办法 __is_sufficient_balance()。这些公有属性和办法只能在 BankAccount 类外部拜访,而不能在类内部拜访。

咱们还定义了几个公共办法:deposit()withdraw() 和 get_balance(),它们容许在类内部操作 BankAccount 类的实例。这些办法提供了拜访公有属性和公有办法的接口,同时暗藏了它们的实现细节。

4.3.2 属性装璜器(Property Decorators)

在 Python 中,能够应用属性装璜器(@property)将一个办法转换为只读属性。这容许咱们在不批改类内部代码的状况下,将属性的拜访逻辑封装在类外部。以下是一个示例:

class Circle:
    def __init__(self, radius):
        self.__radius = radius

    @property
    def radius(self):
        return self.__radius

    @property
    def diameter(self):
        return self.__radius * 2

    @property
    def area(self):
        return 3.14159 * self.__radius ** 2

circle = Circle(5)
print(circle.radius)    # 输入后果:5
print(circle.diameter)  # 输入后果:10
print(circle.area)      # 输入后果:78.53975

在这个示例中,咱们定义了一个名为 Circle 的类,它具备一个公有属性 __radius。咱们还定义了三个属性装璜器:radius(读取 __radius 的值)、diameter(计算圆的直径)和 area(计算圆的面积)。这些属性装璜器将办法转换为只读属性,容许咱们在类内部像拜访属性一样拜访它们。

4.3.3 设定器(Setter)装璜器

除了属性装璜器外,还能够应用设定器(setter)装璜器(@<attribute>.setter)定义属性的设定办法。以下是一个示例:

class Circle:
    def __init__(self, radius):
        self.__radius = radius

    @property
    def radius(self):
        return self.__radius

    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError("Radius cannot be negative.")
        self.__radius = value

circle = Circle(5)
circle.radius = 10  # 设置新的半径值
print(circle.radius)  # 输入后果:10

在这个示例中,咱们为 Circle 类增加了一个名为 radius 的设定器装璜器。它定义了一个名为 radius() 的办法来设置公有属性 __radius 的值。在这个办法中,咱们还增加了一个简略的验证逻辑,确保半径值不为正数。

通过应用封装,咱们能够在类外部暗藏实现细节,从而进步代码的可维护性、可重用性和安全性。在 Python 中,咱们能够应用公有属性、公有办法、属性装璜器和设定器装璜器来实现封装。

小结

在本节中,咱们学习了如何在 Python 中实现封装。咱们探讨了以下概念:

  1. 公有属性和公有办法:应用双下划线(__)前缀定义的属性和办法,只能在类外部拜访。
  2. 属性装璜器:应用 @property 装璜器将一个办法转换为只读属性,容许在类内部像拜访属性一样拜访它。
  3. 设定器装璜器:应用 @<attribute>.setter 装璜器定义属性的设定办法,容许在类内部设置属性的值。

通过实例代码,咱们学习了如何在 Python 中应用这些概念来实现封装。心愿这些示例能帮忙你更好地了解和把握封装的概念。如果你有任何问题,请随时发问。

举荐浏览:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

退出移动版