小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-06-11 / 10 阅读
0
0

Python 面向对象 私有成员

在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)来操作这些成员,从而保证类的稳定性和可维护性。

评论