鱼C论坛

 找回密码
 立即注册
查看: 1099|回复: 6

[已解决]问题

[复制链接]
发表于 2020-7-5 13:59:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

最佳答案
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 方法来访问而不是直接通过实例属性访问

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 方法来访问而不是直接通过实例属性访问

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 14:01:53 | 显示全部楼层
Python 和C++不同,对公有私有没有太大规定,
你如果不想让外部调用一个函数或者使用一个变量的话,
在变量名/函数名前面加个下划线(_),代表私有就行了(不是真的私有)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

加两个下划线就真正的设成私有了呗,设置私有与否就看我希不希望他是不是私有吗,对代码本身没有什么功能上的影响吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

1,并不是,还是有访问的方法的
2,是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

举个 ...

对我就是想问加单下划线的这种,加和不加都能直接访问,但是为什么要加呢,就单纯为了提醒这个属性是私有的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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




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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表