当前位置: 首页 > 编程笔记 >

Python程序中的私有变量

缑勇锐
2023-03-14
本文向大家介绍Python程序中的私有变量,包括了Python程序中的私有变量的使用技巧和注意事项,需要的朋友参考一下

在本教程中,我们将学习Python类中私有变量

Python没有称为私有变量的概念。但是,大多数Python开发人员都遵循命名约定来告诉变量不是公共变量,而是私有变量。

我们必须以双下划线开头一个变量名称,以将其表示为私有变量(不是真的)。示例:-一,二等..,。

正如我们已经说过的,名称以双下划线开头的变量不是私有的。我们仍然可以访问。让我们看看如何创建私有类型变量,然后看看如何访问它们。

# creating a class
class Sample:
   def __init__(self, nv, pv):
      # normal variable
      self.nv = nv
      # private variable(not really)
      self.__pv = pv
# creating an instance of the class Sample
sample = Sample('Normal variable', 'Private variable')

我们已经创建了一个类及其实例。我们有两个变量,一个是正常变量,另一个是__init__方法内部的私有变量。现在,尝试访问变量。看看会发生什么。

示例

# creating a class
class Sample:
   def __init__(self, nv, pv):
      # normal variable
      self.nv = nv
      # private variable(not really)
      self.__pv = pv
# creating an instance of the class Sample
sample = Sample('Normal variable', 'Private variable')
# accessing *nv*
print(sample.nv)
# accessing *__pv**
print(sample.__pv)

输出结果

如果运行上面的代码,则将获得以下输出。

Normal variable
---------------------------------------------------------------------------
AttributeError                         Traceback (most recent call last)
<ipython-input-13-bc324b2d20ef> in <module>
      14
      15 # accessing *__pv**
---> 16 print(sample.__pv)
AttributeError: 'Sample' object has no attribute '__pv'

程序显示了nv变量,没有任何错误。但是,当我们尝试访问__ pv变量时,我们遇到了AttributeError

为什么会出现此错误?因为没有任何变量名称为__ pv的属性。那么init方法中的self .__ pv = pv语句呢?我们将对此进行讨论。首先,让我们看看如何访问__ pv变量。

我们有机会获得任何类变量,其名称startswith一个双下划线_className \ _variableName_。因此,在示例中,它是_Sample \ _pv_。现在,使用_Sample \ _pv_名称访问它。

示例

# creating a class
class Sample:
   def __init__(self, nv, pv):
      # normal variable
      self.nv = nv
      # private variable(not really)
      self.__pv = pv
# creating an instance of the class Sample
sample = Sample('Normal variable', 'Private variable')
# accessing *nv*
print(sample.nv)
# accessing *__pv** using _Sample__pv name
print(sample._Sample__pv)

输出结果

如果运行上面的代码,则将得到以下结果。

Normal variable
Private variable

为什么变量__名PV已经改变?

在Python中,有一个称为名称修饰的概念。Python会更改以双下划线开头的变量的名称。因此,任何名称以双下划线开头的类变量都将更改为_className \ _variableName_形式。

因此,该概念也将适用于该类的方法。您可以使用以下代码查看它。

示例

class Sample:
   def __init__(self, a):
      self.a = a

   # private method(not really)
   def __get_a(self):
      return self.a
# creating an instance of the class Sample
sample = Sample(5)
# invoking the method with correct name
print(sample._Sample__get_a())
# invoking the method with wrong name
print(sample.__get_a())

输出结果

如果运行上面的代码,则将得到以下结果。

5
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-19-55650c4990c8> in <module>
      14
      15 # invoking the method with wrong name
---> 16 print(sample.__get_a())
AttributeError: 'Sample' object has no attribute '__get_a'

结论

使用双下划线的目的不是为了限制访问变量或方法。这是为了告诉特定变量或方法只应在类内部绑定。如果您对本教程有任何疑问,请在评论部分中提及。

 类似资料:
  • 问题内容: 我看到很多执行“松散”私有变量/功能的python代码。他们将用一个下划线(例如_foo)声明函数/变量,然后仅在类/文件中使用它。他们不使用双下划线确实让我感到烦恼,因为最终,有人会从班级外部将此人称为“私人”成员。 是否有某种方法可以在单个下划线上强制执行隐私(不更改为双下划线)?谢谢! 问题答案: 否。这就是python的理念:不要让编译器/解析器强制执行隐私,因为 想要 访问私

  • 问题内容: 我来自Java世界,正在阅读Bruce Eckels的Python 3 ,和。 在阅读类时,它继续说在Python中不需要声明实例变量。你只需在构造函数中使用它们,然后它们就在那里。 因此,例如: 如果是这样,那么类的任何对象都Simple可以s在类外部更改变量的值。 例如: 在Java中,我们已经学会了有关公共/私有/保护变量的知识。这些关键字之所以有意义,是因为有时你需要一个类中的

  • 我编写了一个ClientHttpRequestInterceptor实现,以自动将一些HttpHeader插入到来自Spring Boot服务的任何传出请求中。 我支持的头之一是指示发送此请求的源应用程序。为此,我将“spring.application.name”应用程序属性注入到私有变量中,并使用该私有变量设置HttpHeader。

  • 本文向大家介绍Python面向对象程序设计之私有变量,私有方法原理与用法分析,包括了Python面向对象程序设计之私有变量,私有方法原理与用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法。分享给大家供大家参考,具体如下: python的私有化是为了规划私有属性,避免非相关的访问【假如!我有老婆,你不能直接知道我老婆是谁,你只

  • 如果继承了方法,并且它需要一些私有变量,那么这也必须在中提供,因为我现在正在中调用? 编辑:对于那些说将调用父类方法的人,我发现只有创建的对象,而没有单独的对象一个用于子类,一个用于父类。这里