我正在尝试将Python类中的public参数更改为private参数。据我所知,要使其私有,我需要声明例如:
self .__ top = None#<-代替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
答案 0 :(得分:2)
我假设通过使用诸如struct
,public
和private
之类的术语,您必须来自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