为什么我这么写应该是输出26,但是还是输出了28?

为什么我这么写应该是输出26,但是还是输出了28?

class Person(object):

   def __init__(self,age):
       self.__age = age
   # @property
   def age(self):
       return self.__age

   # @age.setter
   def age(self, value):
       if not isinstance(value, int):
           return print("年龄只能是整数")
       if value < 0 or value > 100:
           return print("年龄只能介于0-100之间")
       self.__age = value


d = Person(26)
d.__age = 28
print(d.__age)  # 28

正在回答 回答被采纳积分+1

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

3回答
好帮手乔木 2019-10-08 08:24:47

同学你好:

访问对象的私有属性,必须使用obj._类名__属性名的方式去访问,python会将该私有属性变为这种形式。(d._Person__age)

同学的d.__age是给d这个对象一个新的属性__age。

http://img1.sycdn.imooc.com//climg/5d9bd7260941d66204990870.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。

吃bug的少年 2019-10-06 08:48:00

添加了一个新的属性__age 并且赋值了,因为self.__age是私有属性,在存储时存储到别的变量上去了而不是d.__age

  • 提问者 qq_多大_0 #1
    那我好像还是可以访问私有属性并可以修改
    2019-10-06 13:32:24
  • 吃bug的少年 回复 提问者 qq_多大_0 #2
    你写个方法把私有属性打印出来看下,应该是没变得
    2019-10-06 13:39:27
吃bug的少年 2019-10-06 08:42:28

给d.__age赋值了

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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