关于私有变量__age的问题

关于私有变量__age的问题

就是当我们使用print(cat_black.__age)的时候,程序是会报错来告知我们无法从类的外部直接调用私有变量__age的值,但是,当我们使用cat_black.__age = 6的时候,就只是修改失败而已,并没有直接报错。两种方式,一种是直接从类外读取私有变量的值,一种是从类外修改私有变量的值,本质来说,都是从类外直接使用私有变量,为什么报错的形式不一样呢?一个比较强硬点,一个又比较隐晦点呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。在使用cat_black.__age = 6时,表示动态添加__age属性,和之前类中定义的私有属性是不一样的,因此是可以输出的

同学可以使用dir()查看下所有属性和方法,是会看到两个是不一样的

class Cat(object):
    def __init__(self, age):
        self.__age = age


cat = Cat(20)
# print(cat.__age)
# print(id(cat.__age))
cat.__age = 90
print(cat.__age)   # 90
print(dir(cat))
# 运行结果
"""
['_Cat__age', '__age', '__class__', '__delattr__', 
'__dict__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__gt__', '__hash__', 
'__init__', '__init_subclass__', '__le__', '__lt__', 
'__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__']
"""

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师