在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' #报错