python中受保护变量和公共变量有啥区别
Posted
技术标签:
【中文标题】python中受保护变量和公共变量有啥区别【英文标题】:What is the difference between protected and public variable in pythonpython中受保护变量和公共变量有什么区别 【发布时间】:2020-12-06 20:18:17 【问题描述】:在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中使用受保护的变量[如果我的方法是错误的]
提前致谢。
【问题讨论】:
【参考方案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 类中的所有成员都是公共的。可以从类环境之外访问任何成员。
在大多数情况下使用受保护。不允许直接访问变量。
【讨论】:
以上是关于python中受保护变量和公共变量有啥区别的主要内容,如果未能解决你的问题,请参考以下文章