->
->常常出现在python函数定义的函数名后面, 为函数添加元数据,描述函数的返回类型, 从而方便开发人员使用. 如:
def add(x, y) -> int:
return x+y
这里面, 元数据表明了函数的返回值为int类型. 这样做的好处是, 使用预期的类型来注释参数, 然后在函数返回值验证时检验参数的类型或者将其强制转换成预期的类型.
@
@是一个property, 这是另一个关于python面向对象编程的问题. 以如下代码为例, @ property是一个装饰器, 它能够使得一个类把一个方法变成属性调用的形式.
@property
def attrs(self) -> _Attrs:
pass
比如, python类中, 我想要访问, 设置私有变量, 可以通过和C++类似的方式, 如:
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
s = Student()
s.set_score(60) # ok!
s.get_score()
不过, 这样看起来有些麻烦, 实际上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' #报错