【发布时间】:2019-08-26 18:31:09
【问题描述】:
我正在尝试将 Python 类中的公共参数更改为私有参数。据我所知,要使其私有化,我需要声明例如:
self.__top = None # <-- Instead of self.top = None
但是,我不知道如何使用私有属性创建私有结构,以便在公共方法中正确调用它们。
例如:
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
【问题讨论】:
-
如果创建属性
self.__size,那么它是self.__size,而不是self.size。下划线是名称的一部分。 -
Python 没有私有属性。您正在使用双下划线名称修饰,这与 private 不同。按照惯例,不属于公共 api 的成员前加一个下划线。这只是一个命名约定。双下划线名称修改是为了防止 子类 中的名称冲突。
标签: python oop stack private public