Python公共和私有方法[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我试图在Python类中更改公共参数。据我所知,为了使它成为私有我需要声明例如:

self .__ top =无#< - 代替self.top =无

但是,我无法弄清楚如何使用私有属性创建私有结构,以便在公共方法中正确调用它们。

例如:

class Stack:

    def __init__(self, size=None):
        self.__top = None
        if size is None:  # if size is unset
            self.__size = -1
        else:
            self.__size = size
        self.__current_size = -1

    def push(self, data):
        if self.current_size >= self.size: # ERROR!
            print("Stack Overflow!")
            return
python oop stack private public
1个回答
2
投票

我假设通过使用structpublicprivate这样的术语,你必须来自C/C++的背景。 Python中没有这样的东西,属性的命名纯粹是传统的。我建议阅读What is the meaning of a single and a double underscore before an object name?

通常,对于您不希望其他人在您的类之外使用的“私有”属性,惯例是在其前面添加一个像_这样的下划线_size。如果您打算在外面使用它,可以归结为以下情况:

  • 你想让它从外面写出来吗?在这种情况下,您只需将其定义为size并在任何地方使用它
  • 你想让它从外面读取吗?在这种情况下,您可以将其设为私有并为其创建属性,如:

码:

class A:

    self __init__(self, size):
        self._size = size

    @property
    def size(self):
        return self._size

您还可以将内部变量转换为另一个名称,并使其在该不同名称下同时可写。

例:

class A:

    def __init__(self, value):
        self._internal_var = value

    def set_data(self, value):
        self._internal_var = value

    def get_data(self):
        return self._internal_var

    data = property(get_data, set_data)

或者:

@property
def data(self):
    return self._internal_var

@data.setter
def data(self, value):
    self._internal_var = value

如果你打电话:

a1 = A(11)
print(a1.data)
a1.data = 22
print(a1.data)

将产量:

11
22
© www.soinside.com 2019 - 2024. All rights reserved.