首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“使用setattr [...],目标是一个带点的导入字符串”是什么意思?

使用setattr函数,目标是一个带点的导入字符串,意思是将一个带点的导入字符串作为目标,通过setattr函数来设置该目标的属性。

setattr函数是Python内置函数之一,用于设置对象的属性值。它接受三个参数:对象、属性名和属性值。通过调用setattr函数,可以动态地为对象设置属性。

在这个问答内容中,"使用setattr函数,目标是一个带点的导入字符串"的意思是,要使用setattr函数来设置一个带点的导入字符串所表示的目标对象的属性。

具体来说,带点的导入字符串是指一个字符串,其中包含了模块、类或对象的层级关系,通过点号连接。例如,"module1.module2.Class1"表示module1模块中的module2模块中的Class1类。

使用setattr函数,可以通过带点的导入字符串来设置目标对象的属性。例如,可以使用以下代码来设置名为"module1.module2.Class1"的类的属性:

代码语言:txt
复制
import importlib

target = "module1.module2.Class1"
attribute = "attribute_name"
value = "attribute_value"

module_name, class_name = target.rsplit(".", 1)
module = importlib.import_module(module_name)
class_ = getattr(module, class_name)
setattr(class_, attribute, value)

上述代码中,首先通过rsplit函数将带点的导入字符串拆分为模块名和类名。然后,使用importlib模块的import_module函数动态导入模块。接着,使用getattr函数获取目标类对象。最后,使用setattr函数设置目标类对象的属性。

这样,就可以通过setattr函数和带点的导入字符串来动态设置目标对象的属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你必须要了解了知识-python反射机制

反射 反射机制就是在运行时,动态的确定对象类型,并可以通过字符串调用对象属性、方法、导入模块,一种基于字符串事件驱动。...exec,exec("a.test()"),输出:test 虽然我们可以使用eval和exec来执行以上代码,但是这种方式有一个缺陷,假如这个属性不存在,那么这种调用就会报错。...那么做好方式是什么呢?...新增不存在属性,并设置值 虽然setattr(a, "age", 32)等于a.age=32,但是我们不要忘了,这是通过一个字符串来增加属性。...,我们要通过其他py模块来导入这个文件,使用__import__我们就可以把它导入一个对象,然后使用对象方式去调用,而不是一直用exec字符串形式去调用。

1.2K21

巡风源码浅析之 Vulscan 分析篇

sys.modules.keys() 存储了已经加载模块,再调用已加载模块取得其中缓存,没有重新导入模块。 ?...即一个插件被多个目标调用,而不是一个目标调用多个插件。所以,最多同时只存在一种类型插件,也就 keys() 值一直都是一个,没必要使用 for 循环,全部 del 一遍。...遍历目标一个目标一个线程,但是只有当前运行总线程数 ( thread....plugin 中几个键代表意思如下: url: 要访问漏洞URL地址 tag: 漏洞标签 analyzing: 分析模式(keyword表示根据关键词判断漏洞) analyzingdata: 分析具体数据...(这里指关键词是什么) data: POST请求要用到数据 method: 使用HTTP请求方法 0x03: 总结 思想亮点在于 1、设置了 python 插件统一格式,有两个必须函数,用来统一调用

1.3K00

python--面向对象与模块补充,反射

"单下划线 " 开始成员变量叫做保护变量,意思只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供接口进行访问;不能用'from module import *'导入,类似于php..." 双下划线 " 开始私有成员,意思只有类对象自己能访问,连子类对象也不能访问到这个数据。...python中一切事物都是对象(都可以使用反射) 四个可以实现自省函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) ? ? ? 执行: m() ?...反射可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,这其实是一种‘后期绑定’,意思可以事先把主要逻辑写好(只定义接口),然后后期再去实现接口功能, 导入其他模块,利用反射查找该模块是否存在某个方法...模块在导入时候如果使用了,from module import * 那么私有方法不能被导入 ? ? ? 会报错 如果改为直接调用可以运行,这说明python没有绝对私有机制 ? ?

38340

Python面试题之Python反射机制

,可以使用import.现在有这样需求,我动态输入一个模块名,可以随时访问到导入模块中方法或者变量,怎么做呢?...其实,反射就是通过字符串形式,导入模块;通过字符串形式,去模块寻找指定函数,并执行。利用字符串形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串事件驱动!   ...先来介绍四个内置函数: 1. getattr()函数Python自省核心函数,具体使用大体如下: class A: def __init__(self): self.name = 'zhangjing...参数一个对象,一个字符串一个任意值。字符串可能会列出一个现有的属性或一个属性。这个函数将值赋给属性。该对象允许它提供。...参数一个对象(记住python中一切皆是对象)和一个字符串组成。string参数必须对象属性名之一。该函数删除该obj一个由string指定属性。

2.4K20

如何理解Python中包引入

上面没提到__all__是什么。__all__一个字符串列表,指定了当from import *被使用时,模块(或者如后文会提到包)中哪些符号会被导出。...当从一个包中导入全部时,__all__做法和模块基本一样,不过它处理包中模块(而不是把模块中名都导入)。...这种方式下,读者(非常可能未来你自己)就不会困惑于你代码中使用一个变量/方法/类/其他东西哪儿来,这也告诉了我们下一点: 可读性很重要 即使你需要导入很多东西,一个一个显式地导入也更清楚。...凡是在导入带点,点左边都必须一个包 (import a.fun1 其中a为py文件)这种导入形式错误。...一般来说 import 后面不能带点,如:(from a import b.c错误语法) 导入模块时,将模块py文件导入进去(执行);导入包时,只会执行包中__init__文件中代码,故导入包时一般要导入到最底层

80020

Python面向对象编程Day 26部分

多态继承改变和扩展实现机制,即调用不同类实例化得对象下相同方法,实现过程不一样。 (python中标准类型就是多态概念一个良好示范) 封装 本质要明确区分内外。...)   第三个层面的封装(真正封装):明确区分内外(内部可以直接使用,外部则不能),内部实现逻辑,外部无法知晓,并且为封装到内部逻辑提供一个访问接口(访问函数 )给外部使用   通过继承+多态在语言层面支持了归一化设计...,key(字符串形式),value )添加或修改     delattr(object,key(字符串形式))相当于 del object.key 动态导入模块 底层基于反射去做。...')  #实际引入m1 module_t.t  #在调用m1文件夹中t文件 from m1.t import *  #标红是因为没在环境变量中  导入不了函数名以下划线开头函数 import...__dict__) 输出 执行setattr name alex 开始设置 {'name': 'ALEX'} 不允许删除属性【name】 {'name': 'ALEX'} 二次加工标准类型(包装) 授权包装一个特性

41130

Python反射

反射定义 根据字符串形式去某个对象中操作成员 根据字符串形式去一个对象中寻找成员 根据字符串形式去一个对象中设置成员 根据字符串形式去一个对象中删除成员 根据字符串形式去一个对象中判断成员是否存在...---- 初始反射 通过字符串形式,导入模块 根据用户输入模块名称,导入对应模块并执行模块中方法 # Python使用3.5.1 [root@root ~]# python -V Python...F1 反射相关函数 getattr(object, name[, default]) 根据字符串形式去一个对象中寻找成员 # 自定义模块内容 [root@root ~]# cat commons.py...value) 根据字符串形式去一个对象中设置成员 设置全局变量 # 获取commons内Name变量 >>> getattr(commons, "Name", None) # 在commons模块中设置一个全局变量...", None) 'YangWen' getattr结合lambda表达式设置一个函数 >>> setattr(commons, "as", lambda : print("as")) >>> getattr

41120

说说Python中反射是什么

公众号新增加了一个栏目,就是每天给大家解答一道Python常见面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试同学,提供一点点帮助!...小猿会从最基础面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己意见和讨论,大家要一起学习 。...废话不多说,开始今天题目: 问:说说Python中反射? 答:在反射机制就是在运行时,动态的确定对象类型,并可以通过字符串调用对象属性、方法、导入模块,一种基于字符串事件驱动。...通过字符串形式,去模块寻找指定函数,并执行。利用字符串形式去对象(模块)中操作(查找/获取/删除/添加)成员。 Python一门解释型语言,因此对于反射机制支持很好。...在Python中支持反射机制函数有getattr()、setattr()、delattr()、exec()、eval()、__import__,这些函数都可以执行字符串

62320

MMCV之Config注释详解

__getattr__ 和 __setattr__ 函数,这两个函数让用户可以通过访问属性方式(也就是 a.b)来访问字典中值,不过 addict 可以嵌套多层,比较强大,我们可以重写这两个函数来实现一个简单...__setattr__('_text', text) fromfile 这个最重要函数,也就是从文件中读取 config,然后变成 Config 对象。...,如果 import a.b, # 则会认为 a 一个名字,就会出错,其实模块名叫 a.b, # 因此这里就巧妙地通过操作系统 copy 将原文件换了个合理名字保存在 tmp...) for key, value in support_templates.items(): # 通过正则表达式将上面的 4 个模版替换成真实值 # 正则表达式意思...(config_file) import_modules_from_strings 这是 mmcv.utils.misc 中一个函数,用来根据字符串导入 python 模块。

74620

python3--面向对象进阶

python中一切事物都是对象(都可以使用反射) 四个可以实现自省函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 反射 正常情况下如果可以拿到这个变量, 那么如有这个变量字符串形式...,就是用反射可以获取到这个值 使用字符串数据类型变量名 访问一个命名空间中名字 找一个属性,直接就可以找到这个属性值 找一个方法,找到这个方法内存地址 getattr 使用字符串数据类型变量名...对象使用对象能用方法和属性 模块使用模块中名字 导入os模块,利用getattr获取os模块中'rename'对应值,os.rename('old','new')执行改文件名操作 import...getattr(类名,'名字') 对象使用对象能用方法和属性 getattr(对象名,'名字') 模块使用模块中名字 导入模块 getattr(模块名,'名字') 从自己所在模块中使用自己名字...__dict__) # 使用setattr: 无则增加有则修改原则 setattr(a, 'age', 18)  # 给a对象新增一个属性 print(a.

27920

Python 异常处理与反射机制

,可以断下所有错误 KeyboardInterrupt Ctrl+C被按下,触发此类异常 NameError 使用一个还未被赋予对象变量 SyntaxError Python代码非法,代码不能编译 TypeError...则抛出ZeroDivisionError异常,as temp意思将出现错误保存到temp变量中. import os import sys try: result = 10/0 except...,显式告诉程序员该类异常类,自定义异常使用 raise 语句引发,而且只能通过手工方式触发,下面这段代码演示了自定义异常使用. import os import sys class lysharkException...反射机制:反射就是通过字符串形式,导入模块.通过字符串形式,去模块中寻找指定函数,对其进行操作,也就是利用字符串形式去对象(模块)中操作成员,一种基于字符串事件驱动,这种机制就叫做反射机制....Python 中反射功能由以下四个内置函数提供:hasattr、getattr、setattr、delattr,这四个函数分别用于在对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员、导入模块以字符串方式导入

51020

Python中下划线---完全解读

Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx 类中私有变量名 核心风格:避免用下划线作为变量名开始...因为下划线对解释器有特殊意义,而且内建标识符所使用符号,我们建议程序员避免用下划线作为变量名开始。一般来讲,变量名_xxx被看作“私有 ”,在模块或类外不可以使用。...“单下划线” 开始成员变量叫做保护变量,意思只有类对象和子类对象自己能访问到这些变量; “双下划线” 开始私有成员,意思只有类对象自己能访问,连子类对象也不能访问到这个数据。...以单下划线开头(_foo)代表不能直接访问类属性,需通过类提供接口进行访问,不能用“from xxx import *”而导入;以双下划线开头(__foo)代表类私有成员;以双下划线开头和结尾...__init__() ② 字符串“官方”表现形式 repr(x) x.__repr__() ③ 字符串“非正式”值 str(x) x.

1.5K110

Python面向对象魔法方法和单例模块代码实例

def __str__(self): print('对象被打印时候触发我!') return '必须要写return返回一个字符串!...__slots__是什么:一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象__dict_..._属性字典(类字典共享,而每个实例独立) 3.为何使用__slots__:字典会占用大量内存,如果你有一个属性很少类,但是有很多实例,为了节省内存可以使用__slots__取代 实例_...使用__slots__一个不好地方就是我们不能再给实例添加新属性了,只能使用在__slots__中定义那些属性名。 4.注意事项:__slots__很多特性都依赖于普通基于字典实现。...关于__slots__一个常见误区它可以作为一个封装工具来防止用户给实例增加新属性。尽管使用__slots__可以达到这样目的,但是这个并不是它初衷。 更多用来作为一个内存优化工具。

57100

进阶运维开发(三)- 反射

反射 反射就是通过字符串形式,导入模块,通过字符串形式,去模块寻找制定函数并执行。利用字符串形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串事件驱动。...__dict__ {'x': 2, 'y': 3} # 实例化运用方法 p.show() 5 # 反射 获取类信息 getattr(p, 'show')() 5 # 发射 添加类信息 setattr...__ __delattr__ 当一个类定义了__getattr__方法时,如果访问不存在成员,会调用__getattr__方法 class Point: def __init__(self,...__setattr__时,任何地方对这个类对象增加属性,或者对现有属性赋值,都会调用__setattr__ class Point: def __init__(self, x, y)...__dict__ {'x': 1, 'y': 2} 当需要对实例属性修改,做一些额外操作时候,可以使用__setattr__ 当一个类实现__delattr__时,任何地方对这个类对象删除属性,都会调用

33100

完美使用EndNote插入参考文献,就差这步设置!

可以不使用EndNote软件情况:参考文献数量不多(如20篇以内,且后面不用更改Style),常见于结课论文等不用投稿文章。...如果直接在谷歌学术界面下载EndNote导入文件 就会出现前面提到作者补全等问题 ? 啥文章官网?...导入前面粘贴好List ? ? 导入完成 ?...回到Terms栏,看一下List格式 第1栏为全称、第2栏为带点缩写、第3栏为不带点缩写 第4栏缩写特殊,用相对较少 ▍设置Style期刊格式 导入Styel一般默认期刊名为全称,需要自行设置格式...前面导入步骤Tools中点击New Term ? 输入期刊全称、带点缩写和不带点缩写名称 ▍如何查询期刊缩写?

2.1K10

Django settings

Django 配置文件 Django其实有两个配置文件,一个创建项目的时候,暴露给用户使用settings.py,另外一个项目默认配置文件,需要导入查看from django.conf import...global_settings 当用户不做任何配置时候,会加载使用默认配置文件,就是指定了自己配置,使用自己配置,没有配置使用默认配置; # 就比如settings.py设置语言英语...from djangoitem1 import settings 导入from django.conf import settings来使用配置文件 settings源码分析 用户配置,就使用用户配置...(self, setting, setting_value) ps:Django配置基本都是采用“插拔式”方式,来完成使用字符串就可以完成大部分功能配置; importlib 导入 importlib...,帮助导入,这两种绝对导入结果一样

19930

3.Python3扩展知识之笔试操作总结(三)

; 函数需要能够“保存自己工作”,这时便是yield出现最佳时期; return 隐含意思函数正将执行代码控制权返回给函数被调用地方 yield 隐含意思控制权转移临时和自愿,我们函数将来还会收回控制权...,其目的是为了接近并达到所需目标或结果; 迭代不是一个容器,且判断一个容器是不是有迭代功能只需要查看iter() 和 next() 方法 迭代器不能回退到上一个值,只能一往无前(),当容器中无元素时候...如果你不想模块中某个属性被 from…import * 导入,那么你可以给你不想导入属性名称前边加上一个下划线(_) 模块容易错点,执行下边 a.py 或 b.py 任何一个文件,都会报错 #...__dict__[name] = value ''' sys.modules 一个字典,它包含了从 Python 开始运行起,被导入所有模块。键就是模块名,值就是模块对象。...定义一个类 Nstr,当该类实例对象间发生加、减、乘、除运算时,将该对象所有字符串 ASCII 码之和进行计算: # 注意我们必须要用到 __new__ 方法,因为 str 不可变类型 # 所以我们必须在创建时候将它初始化

52430
领券