封装是面向对象编程的另一个重要概念。它指的是将对象的属性和办法包装在一个类中,从而暗藏它们的实现细节。封装的次要长处是进步了代码的可维护性、可重用性和安全性。在本节中,咱们将探讨封装的基本概念,并通过实例代码展现如何在 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 中实现封装。咱们探讨了以下概念:
- 公有属性和公有办法:应用双下划线(
__
)前缀定义的属性和办法,只能在类外部拜访。 - 属性装璜器:应用
@property
装璜器将一个办法转换为只读属性,容许在类内部像拜访属性一样拜访它。 - 设定器装璜器:应用
@<attribute>.setter
装璜器定义属性的设定办法,容许在类内部设置属性的值。
通过实例代码,咱们学习了如何在 Python 中应用这些概念来实现封装。心愿这些示例能帮忙你更好地了解和把握封装的概念。如果你有任何问题,请随时发问。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g