python中的->和@

2023-11-09

->

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的->和@ 的相关文章

随机推荐

  • chrome/Edge搜索技巧

    1 剔除干扰项搜索 搜索内容 不想要的关键词 排除干扰项 2 特定搜索 给关键词加引号 关键词 只搜索引号里面的字 3 指定网站内搜索 site 域名 关键词 4 指定格式搜索 filetype 文件格式 关键词 可以制定pdf doc p
  • series not exists. Legend data should be same with series name or data name.

    normal删除
  • php+vscode+xdebug搭建php调试环境

    php vscode xdebug搭建php调试环境 开发环境 windows 10 php 8 0 23 xdebug 3 1 6 配置xdebug 查看php版本信息 cmd exe php version 可看到 我的版本信息为8 0
  • 阿里云maven 仓库地址配置

    参考 https help aliyun com document detail 102512 html spm a2c40 aliyun maven repo 0 0 36183054erKD4V 配置指南 maven配置指南 打开mav
  • 深度学习之生成对抗网络(7)WGAN原理

    深度学习之生成对抗网络 7 WGAN原理 1 JS散度的缺陷 2 EM距离 3 WGAN GP WGAN算法从理论层面分析了GAN训练不稳定的原因 并提出了有效的解决方法 那么是什么原因导致了GAN训练如此不稳定呢 WGAN提出是因为JS散
  • Best Cow Fences (前缀和 + 二分)

    描述 Farmer John s farm consists of a long row of N 1 lt N lt 100 000 fields Each field contains a certain number of cows
  • java Timer(定时调用、实现固定时间执行)

    最近需要用到定时调用的功能 可以通过java的Timer类来进行定时调用 下面是有关Timer的一些相关知识 其实就Timer来讲就是一个调度器 而TimerTask呢只是一个实现了run方法的一个类 而具体的TimerTask需要由你自己
  • caffe_master windows下的安装编译

    一 安装配置 caffe master包 https pan baidu com s 1kI2TcOX3Ak kNGGzsTYRBA 其它有需要请留言2602721630 qq com 本文在windows下使用visual studio2
  • 51单片机控制SG90舵机、MG90S舵机

    舵机的控制信号为周期是20ms 的脉宽调制 PWM 信号 其中脉冲宽度从0 5ms 2 5ms 相对应舵盘的位置为0 180度 呈线性变化 也就是说 给它提供一定的脉宽 它的输出轴就会保持在一个相对应的角度上 无论外界转矩怎样改变 直到给它
  • JavaScript 中的 SOLID 原则

    什么是 SOLID SOLID 是 Robert C Martin 的前五个面向对象设计原则的首字母缩写词 这些原则的目的是 让你的代码 架构更具可读性 可维护性 灵活性 单一职责原则 Single Responsibility Princ
  • 关于Java中Arrays.sort()的几种用法

    复习了Java数组之后 突然Arrays里面有一个sort是针对数组排序的 然后就看了看它的简单用法 Java的Arrays类中有一个sort 方法 该方法是Arrays类的静态方法 在需要对数组进行排序时 非常的好用 但是sort 的参数
  • mongo在linux下的安装(实践记录)

    mongo在linux下的安装 1 到官方网站下载需要安装的mongo版本 下载mongo对应的版本 官网为 http www mongodb org downloads 本人用的是公司的版本 mongodb linux x86 64 1
  • mysql如何设置自动增长id列

    参考 https blog csdn net WxQ92222 article details 79956403 我使用的是navicat软件来可视化mysql 实际上navicat可以直接设置自动增长的 在设计表时只要添加类型为int或b
  • linux添加新LUN,无需重启

    author skate time 2011 12 12 linux添加新LUN 无需重启 在给存储增加新的Lun时 在linux下一般是 A 重启操作系统 B 重启HBA卡驱动 1 kudzu 添加完新硬盘后 运行命令kudzu重新扫描新
  • TCP/UDP端口对应(转)

    常用端口编号 0 TCP UDP 保留端口 不使用 若发送过程不准备接受回复消息 则可以作为源端口 1 TCP UDP TCPMUX 传输控制协议端口服务多路开关选择器 5 TCP UDP RJE 远程作业登录 7 TCP UDP ECHO
  • Fiddler手机抓包方法及添加代理后连不上网解决

    Fidder手机抓包要保证电脑和手机在同一个局域网内 电脑端使用ipconfig查看ip地址 1 Fiddle给手机添加代理 Tools gt Options 2 手机添加代理 对应wifi点击高级选项 gt 代理 手动 gt 设置代理主机
  • css div layout,CSS布局指南

    特别声明 本文根据 Rachel Andrew的 Getting Started With CSS Layout 一文整理 在过去几年中 CSS布局已经发生了巨大的变化 现在我们开发网站的方式也发生了巨大变化 现在我们有需要可选的CSS布局
  • css3鼠标悬停动画线条边框特效

    鼠标滑过边框动画效果 使用css3结合jquery 此效果和代码是早些年最早刚接触c3动画时写的 当年写出它来别有一番成就感呢 所以记忆尤新 哈哈哈哈 早些年从不感兴趣这些写文章 管理博客之类的 现在拿出来分享给刚接触动画的小盆友们参考 先
  • 解析

    隐私数据密文控制权只能由单一主体掌控 代表控制权的密钥如何才能安全地交由多个互不信任的主体协同使用 如何在技术层面保障多方授权的公平公正性 任一参与协作的主体密钥丢失 如何实现安全可靠的容灾恢复 在业务方案设计中 安全可控地让多个隐私主体参
  • python中的->和@

    gt gt 常常出现在python函数定义的函数名后面 为函数添加元数据 描述函数的返回类型 从而方便开发人员使用 如 def add x y gt int return x y 这里面 元数据表明了函数的返回值为int类型 这样做的好处是