@property 和 @age.setter什么意思??没听懂

@property 和 @age.setter什么意思??没听懂

正在回答

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

3回答

同学,你好。同学可根据下述两个例子来理解 @age.setter和@property。

1、@property:可以使方法以属性的方式调用。在调用的时候可以体现出来,方法在调用时是要添加括号的

例:

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

2、当属性设置为私有属性时,在外部不可以直接修改,因此可以同时使用@property和@age.setter,从而可以修改私有属性的值。

可以理解为:只有@property表示只读。同时有@property和@*.setter表示可读可写。

class PetCat(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):
            print('年龄只能是整数')
            return 0
        if value < 0 or value > 100:
            print('年龄只能介于0-100之间')
            return 0
        self.__age = value

    @property
    def show_info(self):
        return '今年{}岁'.format( self.__age)

cat_black = PetCat(2)
rest = cat_black.show_info
print(rest)
cat_black.age = 25
rest = cat_black.show_info
print(rest)

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

好帮手慕美 2020-03-27 14:08:30

同学,你好。

1、不使用@property就和正常访问方法一样是需要添加括号的。

下图中例子在调用show()方法时没有添加@property,使用pro.show()调用就可以

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

2、__str__(self)会返回一个对象的描述信息,在python中打印实例化对象时会调用__str__()。如果__str__()中有返回值,则会打印其中的返回值。

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

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

  • 提问者 慕python_SD三德 #1
    @ *.setter呢?
    2020-03-27 15:47:42
  • 好帮手慕美 回复 提问者 慕python_SD三德 #2
    同学,你好。@*.setter是和@property一起使用的,当属性设置为私有属性时,在外部是不可以访问和修改的,因此需要同时使用@property和@age.setter,从而可以修改私有属性的值。同学可以看下第一次回答中的第二个例子。祝学习愉快~~~~
    2020-03-27 18:44:09
提问者 慕python_SD三德 2020-03-27 12:38:41

那如果我不使用@property我打括号会报错吗??

__str__也不怎么理解……

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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