【发布时间】:2019-05-11 02:45:13
【问题描述】:
考虑一个简单的例子:
class encap:
def __init__(self):
self.attr=100
def get_attr(self):
print(self.attr)
obj=encap()
obj.get_attr()
请注意,这里我们并没有将属性设为私有,但它仍然绑定在一个类中,并且我们有一个访问它的方法。
我的问题是:
考虑到封装是指将数据与对该数据进行操作的方法捆绑在一起,即使我们没有将属性设为私有,上述示例是否仍能代表OOP的封装概念?
封装用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问它们。 因此,是否必须将属性设为私有以证明封装的合理性?
【问题讨论】:
-
没有办法在 Python 中强制执行“私有”。但是你可以建立一个约定,如果某件事是私有的,那么每个人都会尊重它。放置一个
_作为属性前缀。或者如果你想要“隐私”真的很糟糕,可以加倍__。不遵守约定可能会破坏将来使用您的代码(客户端代码)的代码。
标签: python-3.x oop encapsulation