Python Public and Private Methods
本问题已经有最佳答案,请猛点这里访问。
我正试图在一个Python类中将一个公共参数改为私有参数。据我所知,为了使它成为私人的,我需要声明,例如:
self.u top=无<--代替self.top=无
但是,我无法弄清楚如何使用私有属性生成私有结构,从而在公共方法中正确调用它们。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
我假设使用诸如
通常,对于您的"私有"属性,您不希望其他人在您的类之外使用这些属性,约定是在其前面加上一个下划线
- 您想让它从外部可写吗?在这种情况下,您只需将其定义为
size ,并在任何地方使用它。 - 您想让它从外部只读吗?在这种情况下,您可以将其设置为私有,并为其设置属性,例如:
代码:
1 2 3 4 5 6 7 8 | class A: self __init__(self, size): self._size = size @property def size(self): return self._size |
您还可以将内部变量转换为另一个名称,并使其同时在该不同名称下可写。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 | 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) |
或者:
1 2 3 4 5 6 7 | @property def data(self): return self._internal_var @data.setter def data(self, value): self._internal_var = value |
如果你打电话:
1 2 3 4 | a1 = A(11) print(a1.data) a1.data = 22 print(a1.data) |
收益率:
1 2 | 11 22 |