Public 和 Python 中的私有方法
Public and private methods in Python
我正在尝试将 public 更改为 Python class 中的私有参数。据我所知,要将其设为私有,我需要声明例如:
self.__top = None # <-- Instead of self.top = None
但是,我不知道如何创建具有私有属性的私有结构,以便在 public 方法中正确调用它们。
例如:
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
我假设通过使用 struct、public 和 private 你必须来自 C/C++ 背景。 Python中没有这些东西,属性的命名纯属约定俗成。
我推荐阅读What is the meaning of a single and a double underscore before an object name?.
通常对于您不想让其他人在您的 class 之外使用的“私有”属性,惯例是在它前面加上一个下划线 _
,例如 _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
我正在尝试将 public 更改为 Python class 中的私有参数。据我所知,要将其设为私有,我需要声明例如:
self.__top = None # <-- Instead of self.top = None
但是,我不知道如何创建具有私有属性的私有结构,以便在 public 方法中正确调用它们。
例如:
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
我假设通过使用 struct、public 和 private 你必须来自 C/C++ 背景。 Python中没有这些东西,属性的命名纯属约定俗成。
我推荐阅读What is the meaning of a single and a double underscore before an object name?.
通常对于您不想让其他人在您的 class 之外使用的“私有”属性,惯例是在它前面加上一个下划线 _
,例如 _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