在Python中,方法(即类的函数)可以通过其名称约定来实现公共(public)和私有(private)的特性。这里的“公共”意味着可以从类外部自由访问,“私有”则表示这些方法或属性仅希望在类内部使用,对外部用户隐藏。
公共方法(Public Method):
公共方法就是没有特殊命名约定的方法,可以直接在类内外被访问。
class MyClass:
def __init__(self, public_value, private_value):
self.public_method_value = public_value
self._private_method_value = private_value
def public_method(self):
return self.public_method_value * 2
# 使用公共方法
obj = MyClass(10, 20)
print(obj.public_method()) # 这是一个公共方法,可以直接调用
私有方法(Private Method):
私有方法通常是以双下划线__开始的(Python的名称修饰规则)。尽管Python没有真正的私有成员,但这种命名方式会被解释器转换成一个带有类名前缀的形式,从而在一定程度上避免外部直接访问。
class MyClass:
def __init__(self, value):
self.__private_method()
def __private_method(self):
print("This is a private method, called from within __init__.")
# 私有方法在类外部直接调用会触发AttributeError
# obj = MyClass(1)
# obj.__private_method() # 直接调用会报错
# 但实际上Python并不会彻底阻止你访问,而是通过名称变换使其变得不易察觉
# obj._MyClass__private_method() # 这种形式可以间接访问,但这违反了设计意图
注意:虽然Python没有严格的访问控制,但遵循命名约定是编写易于理解和维护代码的重要实践。当看到__private_method这样的名字时,开发者应当知道这不是预期从类外部直接调用的。
保护属性(Protected Method/Variable):
单下划线_前缀的成员被视为保护的,它们并不像双下划线那样进行名称修饰,但仍强烈暗示着这些成员是内部实现细节,不建议外部直接访问。
class MyClass:
def __init__(self, protected_value):
self._protected_method(protected_value)
def _protected_method(self, value):
print(f"This is a protected method working with {value}.")
# 类似于私有方法,保护方法也不鼓励直接调用
# obj = MyClass("protected")
# obj._protected_method("external call") # 不推荐这样做
总之,Python通过命名约定来区分公共、私有和保护的成员。而实际的访问限制并不是强制性的,只是通过约定达成的一种编程规范。
当前文章价值7.15元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

评论已关闭!