白白白白丶白 发表于 2020-7-5 13:59:42

问题

在写类的时候,初始化方法的时候,声明属性的私有与否不是太重要吧。或者,在什么情况话一定要声明他是私有的。

声明私有只是起到一个提醒的作用吗,

Twilight6 发表于 2020-7-5 14:01:29

本帖最后由 Twilight6 于 2020-7-5 14:15 编辑




在你不想将这个类直接可以通过实例化后直接访问的话,就可以设置为私有的(标识符前双下划线)

举个例子:
class func():

    def __init__(self):

      self.__private = '我一定要通过 get_attr 来访问!'

    def get_attr(self):
      return self.__private

f = func()
print(f.get_attr())   # 这里成功打印

print(f._func__private)# 这里成功打印,Python 就是把双下划线的属性实际上变成了这样,才导致你无法访问的,加上类名

print(f.__private)   # 这里成功报错,因为设置了私有属性,我们希望用户们通过 get_attr 方法来访问而不是直接通过实例属性访问

还有一种私有 就是单下划线,实际上可以直接访问但是这种私有是程序员们约定熟成的方法设置为私有


qiuyouzhi 发表于 2020-7-5 14:01:53

Python 和C++不同,对公有私有没有太大规定,
你如果不想让外部调用一个函数或者使用一个变量的话,
在变量名/函数名前面加个下划线(_),代表私有就行了(不是真的私有)

白白白白丶白 发表于 2020-7-5 14:05:51

qiuyouzhi 发表于 2020-7-5 14:01
Python 和C++不同,对公有私有没有太大规定,
你如果不想让外部调用一个函数或者使用一个变量的话,
在变 ...

加两个下划线就真正的设成私有了呗,设置私有与否就看我希不希望他是不是私有吗,对代码本身没有什么功能上的影响吗?

qiuyouzhi 发表于 2020-7-5 14:10:54

白白白白丶白 发表于 2020-7-5 14:05
加两个下划线就真正的设成私有了呗,设置私有与否就看我希不希望他是不是私有吗,对代码本身没有什么功能 ...

1,并不是,还是有访问的方法的
2,是的

白白白白丶白 发表于 2020-7-5 14:15:06

Twilight6 发表于 2020-7-5 14:01
在你不想将这个类直接可以通过实例化后直接访问的话,就可以设置为私有的(标识符前双下划线)

举个 ...

对我就是想问加单下划线的这种,加和不加都能直接访问,但是为什么要加呢,就单纯为了提醒这个属性是私有的吗?

Twilight6 发表于 2020-7-5 14:16:07

白白白白丶白 发表于 2020-7-5 14:15
对我就是想问加单下划线的这种,加和不加都能直接访问,但是为什么要加呢,就单纯为了提醒这个属性是私有 ...



对的,应该是这样的,单纯是程序员写个程序员看的

页: [1]
查看完整版本: 问题