【问题标题】:What is the difference between protected and public variable in pythonpython中受保护变量和公共变量有什么区别
【发布时间】:2023-03-21 03:40:01
【问题描述】:

在python中,类中的protected变量和public变量有什么区别

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

>>> a = A()
>>> a.public
'public'
>>> a._protected
'protected'
>>> 

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

提前致谢。

【问题讨论】:

    标签: python-3.x class encapsulation protected access-modifiers


    【解决方案1】:

    除了“public”之外,这些术语都不适用于 Python。

    由于__ 对名称的影响,“私人”版本只能“工作”,但仍然可以访问它。

    >>> a = A()
    >>> print(a._A__private)
    private
    

    这里的“受保护”是更弱的“保护”。如您所见,可以正常访问。只有按照惯例,不应使用单个下划线前缀。 A single underscore prefix has some effect when wildcard importing, 但我认为它在属性名称中使用时没有任何效果。

    Python 没有“私有”类属性。可能有一些模仿它们的巧妙方法,但它们充其量只是 hack。

    【讨论】:

    • 感谢您的信息。所以我认为我们无法将变量设置为受保护的(请确认)感谢有关访问私有变量的信息[我只从你那里了解到]
    • @akhilreddy 如果通过“受保护”,您的意思是只能由类的子类访问,不,我不知道。当然,如果你有足够的创造力,你可能会想出一个 hack,使用闭包或其他东西来模拟受保护的属性,但这不是该语言的特性。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多