通过property和*setter来访问私有变量有什么特殊用处吗?

通过property和*setter来访问私有变量有什么特殊用处吗?

问1:定义了私有变量,为什么还要property和*setter来访问?不是多次一举?

问2:和get()获取,set()赋值两个方法,用法上有和区别?

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

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

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

1回答
时间, 2019-08-13 11:35:52

同学,你好。

1、默认的私有属性是不可以在外部访问的。但私有属性也不是一成不变的,因此要给私有属性提供外部能够操作的方法。

2、设置get、set方法:在使用时调用set方法进行修改值,调用 get方法获取值

例:

class Person(object):
    def get(self):
        return self._height

    def set(self, value):
        if not isinstance(value, int):
            raise ValueError("年龄只能是整数")
        if value < 0 or value > 100:
            raise ValueError("年龄只能介于0-100之间")
        self._height = value
d = Person()
d.set(25)
print(d.get())   # 25

3、propery和*setter:直接以属性的方式访问age修改值即可

例:

class Person(object):
    @property
    def age(self):
        return self._height
    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError("年龄只能是整数")
        if value < 0 or value > 100:
            raise ValueError("年龄只能介于0-100之间")
        self._height = value

d = Person()
d.age = 26
print(d.age)   # 26

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

  • 提问者 lin丶林 #1
    设置私有属性 __age,外部不能直接赋值。即赋值d.age=26会报错,print(d.age)也会报错。 设置propery和*setter,会保证赋值和取值不会报错。 对于外部情况是一样,这不是多此一举吗,多了至少6行代码? 能否举例一些特殊的应用场景,对于外部来说,内部必须要设置propery和*setter的情况?
    2019-10-09 09:44:09
  • 时间, 回复 提问者 lin丶林 #2
    同学,你好。设置私有属性的意义在于外部不能直接访问和修改,若该属性只在类中使用,是不需要设置@propery和@xx.setter的。但有时外部是需要访问该属性的,因此需要添加@propery和@xx.setter。同学可根据实际情况来确定是否要设置。祝学习愉快~~~~
    2019-10-09 10:30:28
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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