Python 私有变量
在定义中,私有变量是指那些只能由其所属类的成员看到和访问的变量,而不能由任何其他类的成员访问。当程序运行时,这些变量被用来访问这些值,以便对其他类的信息保密。Java允许私有变量和方法只访问类内部和外部的成员,在这种情况下,私有函数不能被重写。私有变量是用私有一词来表示的。在 Python 中没有任何声明或定义的东西可以被称为私有成员。
在 Python 中不存在只能从一个对象内部访问的 “私有 “实例变量。然而,大多数 Python 程序员和编码员遵守一个标准,使用以下划线开头的名称。例如,函数、方法或数据成员 _java 应该被看作是 Apis 或任何 Python 代码的非公共部分。当我们读完后,我们还将尝试掌握几种类型的尾部下划线的概念,如for in range(10) 和 __init__ (self)
。
私有变量的工作
实际上,Python 编程语言缺乏任何私有成员或变量。在 Java 中,这是用 private 关键字完成的;在 Python 中,这是用两个下划线完成的。
任何必须被标记为私有的属性或函数都应该以 ( ) 开头。当我们在Python中把变量声明为私有数据成员时,对于程序员来说,确保数值不能像我们把它指定为公共的那样容易被改变或修改是很简单的。除非数值被声明为公共的,那么任何类都可以访问它们并改变或调整它们的数值,这将导致脚本的中断。
例子1 :
class mclass:
__privateVariable1 = 2018;
def __privateMethod1(self):
print("I'm inside the class mainclass which this is private method")
def iclass(self):
print("Private Variable: ",mclass.__privateVariable1)
self.__privateMethod1()
foo = mclass()
foo.insideclass()
输出
(privateVariable1 : 2018)
I'm inside the class mclass which this is private method
解释一下 。
在上面的程序中,我们有一个定义为 “mclass “的类,其中的因子和方法用两个下划线宣布为私有。私有变量被命名为”__PrivateVariable1″,私有方法被命名为”__PrivateMethod1″,这样它们就可以被访问到具有相同类 “mclass “的变量,但是它们不能被访问到这个类之外;如果我们试图这样做,我们会收到一个错误,说明这个类中没有这样的特性。
_单引号下划线
基本上,在一个函数、方法或数据组件的开头有一个下划线,表示该方法不是API的一部分,不应该被访问。让我们来看看这一段代码。
# Python code for example
#How a single underscore is used in
def _get_errors1(self):
if self._errors is None:
self.full_clean1()
return self._errors
errors = property(_get_errors1)
这段节选取自Django源代码中的forms.py。这意味着错误是一种属性,也是API的一个组成部分;但是,由于_get errors这个方法是 “私有 “的,所以没有人应该使用它。
例2 :
class mclass:
__privateVariable1 = 2022;
def __privateMethod1(self):
print("We are inside class mainclass which is this is private method")
def insideclass1(self):
print("Private Variable: ",mainclass.__privateVariable1)
foo = mainclass()
foo.insideclass()
foo.__privateMethod1()
输出
解释
在上面的程序中,我们可以看到这个函数是私有的,但是因为我们试图从 “mainclass “以外的类中访问它,所以显示了一个错误信息,说明定义的类中没有这个属性的实例。因此,在一个类中声明的所有变量和函数通常默认为公共的。然而,如果我们在它们后面使用下划线,它们就变成了私有类成员,只能由它们所属的类的其他成员访问。为了消除子类给出的名称的混乱,一个被称为数据扭曲或名称扭曲的过程被用来使变量或方法成为私有的。
真正的私有在 Python 中不被支持,所以它被称为 “弱的内部使用指标”。因此,私有参数、方法、函数和子类在模块中只用一个下划线 ( ) 来声明。因此,我们可以只用一个下划线来定义私有变量。