@和-> 代表什么?

在def定义函数的时候, @和-> 代表什么?

@property

def attrs(self) -> _Attrs:

    pass

 @property是一个装饰器,它能够使得类把一个方法变成属性调用的。

 

关于 -> _Attrs

->常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型,从而方便开发人员使用。比如:

def add(x, y) -> int:

  return x+y

这里面,元数据表明了函数的返回值为int类型。
至于楼主问题中的,-> _Attr则表明函数返回的是一个外部可访问的类的私有变量。

 

 

class Student(object):

    def get_score(self):

         return self._score

 

    def set_score(self, value):

        if not isinstance(value, int):

            raise ValueError('score must be an integer!')

        if value < 0 or value > 100:

            raise ValueError('score must between 0 ~ 100!')

        self._score = value

 

 

不过,这样看起来有些麻烦,实际上python获取、设置类的变量(非私有变量)可以直接通过如下方式:

 

class Student(object):

    pass

 

s = Student()

s.score = 90

print(s.score) # 90

 

这样看起来是不是很简单?但是也有危险,这样对于类的变量的赋值的类型是不可确定的,无法对变量赋值类型进行检查限制,比如可以赋值为整数、字符串、boolean变量等。想要实现这样获取值、赋值,也不是不行,通过@property就可以实现:

 

class Student(object):

    @property

    def get_score(self):

         return self._score

    @property

    def set_score(self, value):

        if not isinstance(value, int):

            raise ValueError('score must be an integer!')

        if value < 0 or value > 100:

            raise ValueError('score must between 0 ~ 100!')

        self._score = value

 

s = Student()

s.score = 90

print(s.score) # 90

s.score = '100' #报错

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值