当前位置: 首页 > news >正文

hasattr、getattr、setattr

在Python中,hasattr()getattr()setattr()是一组内置函数,用于对对象的属性进行操作和查询。这些函数提供了一种方便的方式来检查对象是否具有特定属性,获取属性的值,以及设置属性的值。

1. hasattr

hasattr()函数是一种重要的工具,用于判断对象是否具有指定的属性或方法

1.1 语法

hasattr(object, name)
  • object – 对象。
  • name – 字符串,属性名或方法名。
  • 如果对象有该属性返回 True,否则返回 False。

1.2 案例

  • 案例1
   gs = max(int(self.model.stride.max() if hasattr(self.model, "stride") else 32), 32)  # grid size (max stride)
  • 案例2
if not hasattr(model, "names"):model.names = default_class_names()
  • 案例3
data = model.args["data"] if hasattr(model, "args") and isinstance(model.args, dict) else ""
if prompts and hasattr(self.predictor, "set_prompts"):  # for SAM-type modelsself.predictor.set_prompts(prompts)
  • 案例4
@propertydef names(self):"""Returns class names of the loaded model."""return self.model.names if hasattr(self.model, "names") else None
  • 案例5
  def _close_dataloader_mosaic(self):"""Update dataloaders to stop using mosaic augmentation."""if hasattr(self.train_loader.dataset, "mosaic"):self.train_loader.dataset.mosaic = Falseif hasattr(self.train_loader.dataset, "close_mosaic"):LOGGER.info("Closing dataloader mosaic")self.train_loader.dataset.close_mosaic(hyp=self.args)
  • 案例6
  names = model.module.names if hasattr(model, "module") else model.names
  • 案例7
 if not self.is_fused():for m in self.model.modules():if isinstance(m, (Conv, Conv2, DWConv)) and hasattr(m, "bn"):if isinstance(m, Conv2):m.fuse_convs()m.conv = fuse_conv_and_bn(m.conv, m.bn)  # update convdelattr(m, "bn")  # remove batchnormm.forward = m.forward_fuse  # update forwardif isinstance(m, ConvTranspose) and hasattr(m, "bn"):m.conv_transpose = fuse_deconv_and_bn(m.conv_transpose, m.bn)delattr(m, "bn")  # remove batchnormm.forward = m.forward_fuse  # update forwardif isinstance(m, RepConv):m.fuse_convs()m.forward = m.forward_fuse  # update forwardself.info(verbose=verbose)
  • 案例7
name, m = list((model.model if hasattr(model, "model") else model).named_children())[-1]
  • 案例8
if not hasattr(model, "stride"):model.stride = torch.tensor([32.0])
  • 案例9
 model = model.fuse().eval() if fuse and hasattr(model, "fuse") else model.eval()  # model in eval mode
 if hasattr(self, "nm"):self.__delattr__("nm")if hasattr(self, "bn"):self.__delattr__("bn")if hasattr(self, "id_tensor"):self.__delattr__("id_tensor")

2. getattr

获取object对象的属性的值,如果存在则返回属性值,如果不存在分为两种情况,一种是没有default参数时,会直接报错;给定了default参数,若对象本身没有name属性,则会返回给定的default值;如果给定的属性name是对象的方法,则返回的是函数对象。需要调用函数对象来获得函数的返回值;调用的话就是函数对象后面加括号,如func之于func()

2.1 语法

getattr(object, name[, default])
  • object – 对象。
  • name – 字符串,对象属性或方法。
  • default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

2.2 案例

  • 案例1
 file = Path(getattr(model, "pt_path", None) or getattr(model, "yaml_file", None) or model.yaml.get("yaml_file", ""))
  • 案例2
  nc = getattr(model, "nc", 10)  # number of classes
  • 案例3
    本例中,给定的name是一个方法,通过getattr返回一个函数对象,调用的话就是函数对象后面加括号,然后传入相关的函数参数。
 if name in ("Adam", "Adamax", "AdamW", "NAdam", "RAdam"):optimizer = getattr(optim, name, optim.Adam)(g[2], lr=lr, betas=(momentum, 0.999), weight_decay=0.0)elif name == "RMSProp":optimizer = optim.RMSprop(g[2], lr=lr, momentum=momentum)elif name == "SGD":optimizer = optim.SGD(g[2], lr=lr, momentum=momentum, nesterov=True)else:raise NotImplementedError(f"Optimizer '{name}' not found in list of available optimizers "f"[Adam, AdamW, NAdam, RAdam, RMSProp, SGD, auto].""To request support for addition optimizers please visit https://github.com/ultralytics/ultralytics.")
  • 案例4
  if getattr(dataset, "rect", False) and shuffle:LOGGER.warning("WARNING ⚠️ 'rect=True' is incompatible with DataLoader shuffle, setting shuffle=False")shuffle = False

3. setattr

setattr() 函数的功能相对比较复杂,它最基础的功能是修改类实例对象中的属性值。其次,它还可以实现为实例对象动态添加属性或者方法, 设置属性值时,该属性不一定是存在。

3.1 语法

setattr(object, name, value)

3.2 案例

  • 案例1
r = self.new()
for k in self._keys:v = getattr(self, k)if v is not None:setattr(r, k, getattr(v, fn)(*args, **kwargs))
  • 案例2
for k in "imgsz", "batch":  # allow arg updates to reduce memory on resume if crashed due to CUDA OOMif k in overrides:setattr(self.args, k, overrides[k])
  • 案例3
def reshape_outputs(model, nc):"""Update a TorchVision classification model to class count 'n' if required."""name, m = list((model.model if hasattr(model, "model") else model).named_children())[-1]  # last moduleif isinstance(m, Classify):  # YOLO Classify() headif m.linear.out_features != nc:m.linear = nn.Linear(m.linear.in_features, nc)elif isinstance(m, nn.Linear):  # ResNet, EfficientNetif m.out_features != nc:setattr(model, name, nn.Linear(m.in_features, nc))
  • 案例4
    通过setattr,实现将b的所有属性和方法,copy给a
def copy_attr(a, b, include=(), exclude=()):"""Copies attributes from object 'b' to object 'a', with options to include/exclude certain attributes."""for k, v in b.__dict__.items():if (len(include) and k not in include) or k.startswith("_") or k in exclude:continueelse:setattr(a, k, v)

代码参考:https://github.com/ultralytics/ultralytics

相关文章:

hasattr、getattr、setattr

在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询。这些函数提供了一种方便的方式来检查对象是否具有特定属性,获取属性的值,以及设置属性的值。 1. hasattr hasattr()函数是一种重要…...

构建高可用消息队列系统 01

构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言 在当今互联网时代,消息队列系统扮演着至关重要的角色,它们被广泛应用于分布式系统、微服务架构…...

十本你不容错过的Docker入门到精通书籍推荐

前言: 最近有许多小伙伴私信让我推荐几本关于Docker学习的书籍,今天花了一下午的时间在网上查阅了一些资料和结合自己平时工作中的一些学习参考资料书籍写下了这篇文章。注意以下书籍都是十分优秀的Docker学习书籍(因此排名不分先后&#xff…...

【AI接口】语音版、文心一言大模型和AI绘图、图片检测API

文章目录 一、语音版大模型AI1、接口2、请求参数3、请求参数示例4、接口返回示例 二、AI图片鉴黄合规检测API1、接口2、请求参数3、请求参数示例4、接口返回示例5、报错说明6、代码开源 三、人工智能AI绘画API1、接口2、请求参数3、请求参数示例4、接口返回示例5、AI绘画成果展…...

VUE 中的 v-for 和 v-if 是否可以共存

VUE 中的 v-for 和 v-if 是否可以共存 前言1、面试经2、正确回答3、总结总结: 前言 要成功,先发疯,头脑简单往前冲! 三金四银,金九银十,多学知识,也不能埋头苦干,要成功&#xff0c…...

kubernetes 权限控制

RBAC引入了4个顶级资源对象:Role、ClusterRole:角色,用于指定一组权限;RoleBinding、ClusterRoleBinding:角色绑定,用于将角色(权限)赋予给对象 咱们通过Role可以配置命名空间下资源…...

vue中父组件异步传值,渲染问题

vue中父组件异步传值&#xff0c;渲染问题 父组件异步传值&#xff0c;子组件渲染不出来。有如下两种解决方法&#xff1a; 1、用v-if解决&#xff0c;当父组件有数据才渲染 <Child v-if"dataList && dataList.length > 0" :data-list"dataLis…...

09前后端分离+SSM整合的小案例

前端的Node 后端的Tomcat&#xff0c;是前端程序的容器。前端的npm 后端的maven 1. 导入前端项目 node版本&#xff1a;16.16.0 配置阿里镜像 npm config set registry https://registry.npmjs.org/ 更新npm版本 npm install -g npm9.6.6 用vscode打开解压后的项目 , 右上角…...

模仿ProTable创建ProTable组件

不多说废话直接上代码 父组件 // index.jsx/*** description 此ProTable是根据ProComponents里的ProTable模仿封装的简易版本* */ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useState } from react import { Card, Table } from antd import…...

新品发布 | 多通道总线记录仪TLog1004,是你期待的吗?

新品发布 2024年1月12日&#xff0c;同星智能又发布一款多通道 CAN &#xff08;FD&#xff09;总线、LIN 总线接口logger设备&#xff0c;此款产品在TLog1002基础上进行了升级&#xff0c;同时内置 3 路数字输入和 2 路数字输出&#xff0c;便于多种信号测量和系统集成。可以满…...

Double数据类型保留3位小数

Double scrapGrn scrapQty * Double.parseDouble(lot.getCnvrsnFctr()) / 1000 ; // 保留3位小数 DecimalFormat decimalFormat new DecimalFormat("#.###"); String scrapGrnStr decimalFormat.format(scrapGrn); 345.12344 处理后 为 345.123 34…...

08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)

目录 前言 一、膨胀&#xff08;Dilation&#xff09;与 腐蚀&#xff08;Erosion&#xff09; 二、形态学操作 1、开操作&#xff08;Opening&#xff09; 2、闭操作&#xff08;Closing&#xff09; 3、形态学梯度&#xff08;Morphological Gradient&#xff09; 4、…...

基于JavaWeb+SSM+Vue停车场微信小程序系统的设计和实现

基于JavaWebSSMVue停车场微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关…...

VUE---自定义指令

自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能。可分为全局注册与 局部注册。 全局注册&#xff08;main.js中注册&#xff09;&#xff1a; Vue.directive(指令名称,{ bind(ele,binding) {}, // 只执…...

开发安全之:Cross-Site Scripting (XSS) 漏洞

近期&#xff0c;我会结合研发云陆续发布开发安全相关的文章&#xff0c;欢迎大家关注&#xff01; Overview echo json_encode($arr)&#xff1a;向一个 Web 浏览器发送了未验证的数据&#xff0c;从而导致该浏览器执行恶意代码。 Details Cross-Site Scripting (XSS) 漏洞…...

代码随想录算法训练营第二十四天| 77. 组合

77.组合 public List<List<Integer>> combine(int n, int k) {if (n < k) {return null;}List<List<Integer>> list new ArrayList<>();List<Integer> path new ArrayList<>();backSource(n, path, list, k);return list;}pu…...

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam&#xff0c;有时只是慢&#xff0c;但是还是…...

What is `StringEscapeUtils.escapeHtml4` does?

StringEscapeUtils.escapeHtml4 作用是将特殊字符转换为它们对应的HTML实体形式&#xff0c;从而防止这些字符在网页中被解析为HTML标签或脚本&#xff0c;有助于防止跨站脚本攻击&#xff08;XSS, Cross-Site Scripting&#xff09; 依赖 <!--org.apache.commons.text.St…...

Dubbo 的心脏:理解和应用多种协议【十三】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Dubbo 的心脏&#xff1a;理解和应用多种协议【十三】 前言<dubbo:protocol> 基础<dubbo:protocol> 的定义和作用微服务中协议的重要性支持的协议类型配置示例 配置基本配置参数高级配置选…...

操作系统实验报告

目录 目录 实验一 一、实验结果 实验二 使用信号量实现进程互斥与同步 一、实验结果 1. 使用信号量实现有限缓冲区的生产者和消费者问题 2. 使用信号量实现读进程具有优先权的读者和写者问题 实验三 死锁和预防 一、实验要求 二、实验内容 三、实验结果 实验四 内…...

弯腰系鞋带:动作虽细微,脊柱 “被折得濒临损伤”!

频繁弯腰系鞋带、捡拾地面物品、整理鞋盒、照顾幼儿&#xff0c;颈腰椎损伤风险显著。弯腰时腰椎瞬间弯曲&#xff0c;椎间盘承受压力骤增&#xff1b;单腿站立弯腰时&#xff0c;身体平衡依赖腰部肌肉&#xff0c;受力不均易导致拉伤&#xff1b;反复弯腰起身动作&#xff0c;…...

从Proteus仿真到普中开发板烧录:51单片机抢答器完整开发流程避坑指南

从Proteus仿真到普中开发板烧录&#xff1a;51单片机抢答器完整开发流程避坑指南 在电子设计的学习道路上&#xff0c;51单片机项目开发是一个经典的入门实践。抢答器作为典型的互动式电子系统&#xff0c;涵盖了输入检测、逻辑控制、显示输出等核心知识点&#xff0c;是检验学…...

Qwen3.5-27B部署教程(Docker进阶):自定义模型路径、挂载外部存储与日志卷

Qwen3.5-27B部署教程&#xff08;Docker进阶&#xff09;&#xff1a;自定义模型路径、挂载外部存储与日志卷 1. 环境准备与快速部署 在开始之前&#xff0c;请确保您的系统满足以下要求&#xff1a; 硬件要求&#xff1a;至少4张RTX 4090 D 24GB显卡软件要求&#xff1a;已…...

[Android S] 深入解析statsd的log统计机制与实现

1. 认识Android系统中的statsd statsd是Android系统中一个非常重要的后台服务&#xff0c;它的主要职责是收集系统和应用的各类统计信息。你可能不知道&#xff0c;每次你在Android设备上执行操作时&#xff0c;statsd都在默默记录着各种数据。这些数据对于系统优化、性能分析和…...

Lua代码混淆实战:基于Prometheus的Unity项目保护指南

1. 为什么你的Unity项目需要Lua代码混淆 最近有个做独立游戏的朋友跟我吐槽&#xff0c;他花半年开发的游戏上线不到一周就被破解了。更气人的是&#xff0c;破解版直接去掉了内购系统&#xff0c;还挂在第三方平台免费下载。这种情况在游戏圈太常见了&#xff0c;特别是使用Lu…...

OpenClaw灾难恢复:Qwen3-32B-Chat配置备份与快速重建

OpenClaw灾难恢复&#xff1a;Qwen3-32B-Chat配置备份与快速重建 1. 为什么需要自动化备份策略 上周五凌晨三点&#xff0c;我的开发机突然宕机。硬盘故障导致OpenClaw所有配置和Qwen3-32B-Chat模型接入设置全部丢失——这个教训让我意识到&#xff1a;个人开发环境同样需要企…...

5分钟搞定AI超清画质增强:镜像部署与使用全攻略

5分钟搞定AI超清画质增强&#xff1a;镜像部署与使用全攻略 1. 引言&#xff1a;为什么需要AI画质增强 1.1 低清图像的普遍困扰 我们每天都会遇到各种低质量图片&#xff1a;模糊的老照片、压缩过度的网络图片、分辨率不足的截图。传统放大方法就像简单拉伸橡皮筋&#xff0…...

扩散薛定谔桥(Diffusion Schrödinger Bridge)

扩散薛定谔桥&#xff08;Diffusion Schrdinger Bridge&#xff09; 1. 概述 扩散薛定谔桥&#xff08;Diffusion Schrdinger Bridge, DSB&#xff09;是一类在两个端点分布之间学习随机过渡动力学的方法。其核心目标不是仅恢复终点样本&#xff0c;而是构造一条满足边界约束…...

三相逆变器LCL滤波设计实战:从建模到仿真避坑指南(附仿真文件)

三相逆变器LCL滤波设计实战&#xff1a;从建模到仿真避坑指南 在电力电子领域&#xff0c;三相逆变器的性能优化一直是工程师们关注的焦点。LCL滤波器作为逆变器与电网之间的关键接口&#xff0c;其设计质量直接影响系统稳定性、谐波抑制效果和电磁兼容性。本文将带您深入实战&…...

AI Toolkit for Visual Studio Code完全指南:从环境配置到应用部署的AI开发工具链实践

AI Toolkit for Visual Studio Code完全指南&#xff1a;从环境配置到应用部署的AI开发工具链实践 【免费下载链接】vscode-ai-toolkit 项目地址: https://gitcode.com/GitHub_Trending/vs/vscode-ai-toolkit 工具认知篇&#xff1a;重新定义AI开发流程 AI开发工具链正…...