为了账号安全,请及时绑定邮箱和手机立即绑定

Python 公共和私有方法

Python 公共和私有方法

慕斯王 2021-12-29 18:19:57
我正在尝试将 Python 类中的公共参数更改为私有参数。据我所知,要使其私有,我需要声明例如: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
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

我假设,通过使用诸如structpublicprivate你一定是从的背景C/C++。Python中没有这样的东西,属性的命名纯粹是约定俗成的。我建议阅读对象名称前的单下划线和双下划线的含义是什么?.

通常对于您不希望其他人在您的课程之外使用的“私有”属性,约定是在它前面加上一个下划线,_例如_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


查看完整回答
反对 回复 2021-12-29
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信