当前位置: 首页 > 面试题库 >

Python在类中是否有“私有”变量?

封俊艾
2023-03-14
问题内容

我来自Java世界,正在阅读Bruce Eckels的Python 3 PatternsRecipesIdioms

在阅读类时,它继续说在Python中不需要声明实例变量。你只需在构造函数中使用它们,然后它们就在那里。

因此,例如:

class Simple:
    def __init__(self, s):
        print("inside the simple constructor")
        self.s = s

    def show(self):
        print(self.s)

    def showMsg(self, msg):
        print(msg + ':', self.show())

如果是这样,那么类的任何对象都Simple可以s在类外部更改变量的值。

例如:

if __name__ == "__main__":
    x = Simple("constructor argument")
    x.s = "test15" # this changes the value
    x.show()
    x.showMsg("A message")

在Java中,我们已经学会了有关公共/私有/保护变量的知识。这些关键字之所以有意义,是因为有时你需要一个类中的变量,而该类之外的任何人都无法访问该变量。

为什么在Python中不需要这样做?


问题答案:

这是文化的。在Python中,你无需写入其他类的实例或类变量。在Java中,如果你真的想做的话,什么也不能阻止你做同样的事情-毕竟,你始终可以编辑类本身的源代码以达到相同的效果。Python放弃了这种安全性的幌子,并鼓励程序员负责。实际上,这非常好用。

如果出于某种原因要模拟私有变量,则始终可以使用PEP 8中的__前缀。Python会像这样对变量的名称进行修饰,以使它们在包含它们的类之外的代码中不易被看到(尽管只要有足够的决心,你就可以解决它,就像你可以使用它来避开Java保护一样)。__foo

按照相同的约定,即使没有从技术上阻止你这样做,_前缀也意味着不要离开。你不会在其他类的看起来像__foo或的变量上玩耍_bar



 类似资料:
  • 本文向大家介绍Python程序中的私有变量,包括了Python程序中的私有变量的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将学习Python类中的私有变量。 Python没有称为私有变量的概念。但是,大多数Python开发人员都遵循命名约定来告诉变量不是公共变量,而是私有变量。 我们必须以双下划线开头一个变量名称,以将其表示为私有变量(不是真的)。示例:-一,二等..,。 正如我们已

  • 问题内容: 在Python中,确定IP地址(例如或)是否在专用网络上的最佳方法是什么?该代码听起来并不难编写。但是边缘情况可能比立即出现的情况还多,并且需要考虑对IPv6的支持,等等。是否有现有的库可以做到这一点? 问题答案: 签出IPy模块。如果具有的功能似乎可以满足您的要求:

  • 问题内容: 我想知道Python是否具有类似C#匿名类功能的东西。为了澄清,这是一个示例C#代码段: 在Python中,我会想象这样的事情: 特定要求是能够在表达式上下文中创建具有指定字段的对象(例如,可在lambda和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元

  • 问题内容: 我正在编写一个由两部分组成的小型Python模块: 一些定义公共接口的功能, 上述功能使用的实现类,但在模块外部没有意义。 首先,我决定通过在使用它的函数内部定义该实现类来“隐藏”该实现类,但这会影响可读性,并且如果多个函数重用同一类,则无法使用该实现类。 因此,除了注释和文档字符串外,是否存在将类标记为“私有”或“内部”的机制?我知道下划线机制,但是据我了解,它仅适用于变量,函数和方

  • 问题内容: 当我拥有带有私有方法或字段的内部类时,编译器必须创建受程序包保护的合成访问器方法,以允许外部类访问那些私有元素(反之亦然)。 为了避免这种情况,我通常将所有字段和方法以及构造函数设置为受包装保护,而不是私有的。 但是类本身的可见性如何?有开销吗 与 请注意,在这两种情况下,构造函数都受到程序包保护,还是使类私有更改了? 问题答案: 您是否尝试过编译并比较字节码?这是我的结果。对于: 上