在Python中,可以通过在变量名或方法名前加两个下划线 __
来定义私有成员。这样的成员在类的外部是不能直接访问的,这有助于实现封装和隐藏类的内部实现细节。下面通过几个例子来说明这一点。
私有变量
class MyClass:
def init(self):
self.__private_var = 0 # 私有变量
def set_private_var(self, value):
self.__private_var = value
def get_private_var(self):
return self.__private_var
obj = MyClass()
obj.set_private_var(10)
print(obj.get_private_var()) # 输出: 10
下面的代码会报错,因为直接尝试访问私有变量
#print(obj.__private_var)
尝试访问私有变量
虽然直接通过 obj.__private_var
访问会被视为非法(实际上Python做了名称改编,实际名称变为 _MyClass__private_var
),但应避免绕过封装直接访问这类改名后的变量。
名称改编
Python中的名称改编是一种机制,它将类中的私有变量名改为包含类名的格式,以此来防止外部直接访问。但这主要是作为一种约定,并非绝对的访问限制。
obj = MyClass()
# 绕过封装访问私有变量,不推荐这样做
print(obj._MyClass__private_var) # 输出: 10
总结
- 使用
__
前缀可以创建私有变量和方法,这些成员在类的外部通常不可见,有助于实现封装。 - 尽管可以通过名称改编的方式来访问这些私有成员,但这违反了封装原则,不建议在实际编程中这样做。
- 私有成员的设计目的是为了保护类的内部实现,鼓励通过公共方法(getter和setter)来操作这些成员,从而保证类的稳定性和可维护性。