python中受保护变量和公共变量有什么区别

akh*_*ddy 6 encapsulation class protected access-modifiers python-3.x

在Python中,类中的受保护变量和公共变量有什么区别

class A:
    def __init__(self):
        self._protected="protected"
        self.__private="private"
        self.public="public"

>>> a = A()
>>> a.public
'public'
>>> a._protected
'protected'
>>> 
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下其中的区别,并指导我如何在 python 中使用受保护的变量吗[如果我的方法用法是错误的]

提前致谢。

Car*_*ate 7

除了“public”之外,这些术语都没有真正适用于 Python。

__由于名称受到破坏,“私有”版本只能“工作” ,但仍然可以访问它。

>>> a = A()
>>> print(a._A__private)
private
Run Code Online (Sandbox Code Playgroud)

这里的“保护”是更弱的“保护”。如图所示,可以正常访问。按照惯例,不应使用单个下划线前缀。 单个下划线前缀在通配符导入时有一定作用,但我不认为它在属性名称中使用时有任何作用。

Python 没有“私有”类属性。可能有一些聪明的方法可以模仿它们,但它们充其量只是黑客。

  • @akhilreddy如果“受保护”意味着只能被某个类的子类访问,不,据我所知没有办法。当然,如果您有足够的创造力,您也许能够想出一种使用闭包或其他东西来模拟受保护属性的方法,但这不是该语言的功能。 (2认同)

Hri*_*aha 1

公共成员(通常是在类中声明的方法)可以从类外部访问。调用公共方法需要同一类的对象。私有实例变量和公共方法的这种安排保证了数据封装的原则。

类的受保护成员可从类内部访问,也可供其子类使用。不允许其他环境访问它。这使得子类可以继承父类的特定资源。

Python 没有任何机制可以有效限制对任何实例变量或方法的访问。Python 规定了一种约定,即在变量/方法的名称前添加单下划线或双下划线,以模拟受保护和私有访问说明符的行为。

默认情况下,Python 类中的所有成员都是公共的。任何成员都可以从类环境外部访问。

大多数情况下使用受到保护。不允许直接访问变量。