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

sys.modules[__name__] = _classname()。它实际上是做什么的?

sys.modules[name] = _classname() 是 Python 中的一行代码,它的作用是将一个自定义的类(_classname)添加到当前模块的 sys.modules 字典中。

具体来说,sys.modules 是一个字典,用于存储已导入的模块对象。每个模块在被导入时都会在 sys.modules 中创建一个对应的键值对,键是模块的名称,值是模块对象。这样可以在后续的导入操作中直接从 sys.modules 中获取已导入的模块,避免重复导入和提高导入效率。

在给定的代码中,[name] 是一个特殊的 Python 变量,表示当前模块的名称。通过将 _classname 的实例赋值给 sys.modules[name],可以将该实例添加到当前模块的 sys.modules 中,使得其他地方可以通过 import 语句直接导入该模块并使用 _classname 类。

总结起来,sys.modules[name] = _classname() 的作用是将一个自定义类添加到当前模块的已导入模块字典中,以便其他地方可以方便地导入和使用该类。

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

相关·内容

python import 机制

Python 环境初始化过程中就会将sys module加载到内存中,但是为了local空间更干净,需要用户亲自导入,通知python.module对象实际上一个dict在维护着,hello....home/liaoxinxi/start $ touch __init__.py  嵌套导入 只会影响到自己的本地空间,所有的import操作,不管在什么地方,时间都会影响到全局module集合,这样的话就是一次导入...) 3075426604L  package机制 在module的基础上python增加了package的机制,如果说module文件的话,那package就是文件夹机制,必须在文件夹有..._', '__name__', '__package__', 'hello'] >>> import sys >>> sys.modules['hello'] Traceback (most recent... KeyError: 'a'  符号重命名 没有将start加入到当前空间中,但是sys.module有,这和没重命名不一样的,没有重命名的话,符号空间中有start的。

45620

从SSTI模板注入到内存马

目前 SSTI 都是基于Flask环境下去复现的提到SSTI就必须了解一些魔术方法 payload 在SSTI中我们要做的就两个: 执行命令 获取文件内容 所以我们要做的实际上就是实现这两种效果 这里我写一个...类,实际上获取到任何类都可以,因为我们都最终目的要获取到基类Object。...__name__) ... 遍历查找带有warning的子类 >>> for i in range(174): ... n = c[i].__name__ ......sys.modules具有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块 程序在导入某个模块时,会首先查找sys.modules中是否包含此模块名,包含的话python会直接到字典中查找...__subclasses__()[132]}} 发现属于os模块,既然他os模块里面的类那我们就不用那么麻烦了。 ?name={{''.__class__.__base__.

74820

Python 3.x | 史上最详解的 导入(import)「建议收藏」

该文件可以什么内容都不写,即为空文件(为空时,仅仅用import [该包]形式 是什么也不了的),存在即可,相当于一个标记。...当我们在导入一个包(package)时(会先加载 init .py定义的引入模块,然后再运行其他代码),实际上导入的的 init .py文件(导入时,该文件自动运行,助我们一下导入该包中的多个模块)...2、sys.modules、命名空间、模块内置属性 2.1 sys.modules 官方解释:链接 sys.modules 一个 将模块名称(module_name)映射到已加载的模块(modules...import sys print(sys.modules)#打印,查看该字典具体内容。 2.2 命名空间 如同一个dict,key 变量名字,value 变量的值。...实际上打印locals(),字典中只有moduleA,没有moduleB。

3.8K31

Python的绝对导入和相对导入

结构中,当 import 一个模块时,会按如下步骤来进行如果 import A,检查 sys.modules 中是否已经有 A,如果有则不加载,如果没有则为 A 创建 module 对象,并加载 A...如果相对导入,一个模块必须有包结构且只能导入的顶层模块内部的模块。...例如,moduleX 被 import 进来,的名字就是 package.subpackage1.moduleX。如果 import 了 moduleA,的名字 package.moduleA。...所以上面的moduleX的__name____main__, 因为他直接运行的, moduleY的__name__sub_pkg1.moduleY,因为他被import 来使用的。...相对导入可以避免硬编码,对于包的维护友好的。绝对导入可以避免与标准库命名的冲突,实际上也不推荐自定义模块与标准库命令相同。

3.8K21

分析一个python库--sh(系统调用)

功能让你像调用方法那样调用系统中的命令。比方说你想调用系统的ls方法,普通的做法: import subprocess;subprocess.call("ls") 虽然可用,但总是觉得不是一家人。...用sh库的做法: from sh import ls;ls() 就可以了,毫无违和感。 看到这个库的时候特别好奇怎么实现的,于是看下源码。发现调用部分写的很巧妙。怎么实现的呢?...但如果真这么的话,系统有多少个命令不就要实现多少个函数吗?于是看了下,果然不是这么的,里面没有任何对应名称的函数。那怎么实现from sh import ls的呢?...=self_moduledef__getattr__(self,name):return'%s to ->test'%nameif__name__=="__main__":passelse:self=sys.modules...[__name__]sys.modules[__name__]=Tenv(self) 粘贴这段代码保存为modu.py,然后在同目录下进入python交互模式: >>>frommoduimportthe5fire

1.4K30

学了半天,import 到底在干啥?

查找是否已导入同名模块 首先,Python会按照import xxx中指定的包名,到sys.modules中查找当前环境中是否已经存在相应的包——不要奇怪为什么都没有导入sys这个模块就有sys.modules...sysPython内置模块,也就是亲儿子,导入只是意思一下,让我们这样的外人在导入的环境中也可以使用相关接口而已,实际上相应的数据对Python而言从始至终都是透明的。 ?...我们可以导入sys查看一下这个对象的具体内容(节省篇幅,省略处理): >>> import sys >>> sys.modules {'sys': ...将模块与名字绑定 找到相应的非亲生模块还没完,加载了包还得为分配一个指定的名字,我们才能在脚本中使用这个模块。.../A/alpha.py print("name: " + __name__) print("file: " + __file__) def al(): print("Importing alpha

81730

一个超级小的 Django 项目.

但我建议, 最好不要这样, 因为在选择使用 Django 的时候, 我比较看重的 Django 封装的一系列模块, 我更建议用 Django 官方提供的架构去开始我的工程。...验证 Django 是否安装最简单的方法到交互式界面导入 Python >>> import django >>> print(django.get_version()) 1.11.4 但是我们使用..., ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('A minimal...(sys.argv) SECRET_KEY我们必须要提供的一个参数, DEBUG默认 False, 没有开启 DEBUG 的情况需要定义ALLOWED_HOSTS配置, 所以我们直接覆盖 DEBUG...在这里我们写到一个文件里面了, 所以我们直接定义sys.modules[__name__]表示当前模块, 并在当前文件下面定义urlpatterns列表, 定义的方式和urls.py一样和视图view对应起来

98520

Python 软件热更新

而在sys.modules保存了已经加载过的模块。 ? 为了方便看到展示,我就沿用上次客户端的界面,进行简单修改后,展示给大家看,热更新的效果。 ?...在热更新前,随机产生的数字在原函数里面,版本号为0.0.1,可以比较明显看出 两个数 运行 “相加” 操作的。...用过Redis的同学应该都知道Redis本身就自带了“发布订阅”功能,借助,可以很方便的实现出远程推送消息的需求,我们甚至可以用这个功能实现一个简单的聊天室软件哦。...self.fun = importlib.import_module('myfunction') self.textBrowser.append("热更新完毕") if __name...在主体软件上面,运行插件来扩展更加多的功能,和Chrome这样的浏览器一样,安装插件什么的

1.7K20

解决python3中关于import的疑难杂症

,对用户隐藏各个子模块的实现细节 当我们import一个包时,会自动加载该包对应的__init__.py,因此如果在其中太复杂的运算会造成不必要的开销 sys.modules sys.modules维护了一个已加载...foo.bar的方式来访问bar 模块内部属性 __doc__:文件注释 __file__:当前文件路径 __package__:导入文件的路径 __cached__:导入文件的缓存路径 __name...执行import的步骤 创建一个新的module对象 将该module对象插入sys.modules 装载module的代码 执行新的module中对应的代码 3. import的搜索包顺序 注意第三步装载...方法二:在sys.path中添加查找路径 前面的报错找不到bar_package的模块名,因为直接运行的话sys.path第一个路径就是module_3.py的路径,自然找不到上层的bar_package...module_1 # 跨包引用模块 if __name__ == "__main__": print("module_3 exec successfully!")

1.5K30

Python pickle 反序列化实例分析

具有对 bytes 对象的显式支持,且无法被 Python 2.x 打开。这是目前默认使用的协议,也是在要求与其他 Python 3 版本兼容时的推荐协议。...支持存储非常大的对象,能存储更多种类的对象,还包括一些针对数据格式的优化。有关第 4 版协议带来改进的信息,请参阅 PEP 3154。...__ == '__main__': pysh = Pysh() pysh.run() 限制了导入的模块只能 sys,问题这个模块也不安全呀 :) sys.modules This...有些库默认被加载进来的,例如 os,但是不能直接使用,原因在于 sys.modules 中未经 import 加载的模块对当前空间不可见的。...__import__) 以便修改 import 语句的语义,但是 强烈 不建议这样,因为使用导入钩子 (参见 PEP 302) 通常更容易实现同样的目标,并且不会导致代码问题,因为许多代码都会假定所用的默认实现

63820

python 基础知识汇总(注释规范)

的使用方法如下: from .string import a from ..string import a from ...string import a 这种引入方式使用一个点号来标识引入类库的精确位置...absolute import 针对如下语句: """ ├── __init__.py ├── foo.py └── main.py """ # foo.py a = 2 # main.py print __name...的使用方法如下: from pkg import foo from pkg.moduleA import foo 要注意的,需要从包目录最顶层目录依次写下,而不能从中间开始。...sys.modules 对于第一步中sys.modules,我们可以打开Python来实际的查看一下其内容: Python 2.7.10 (default, Aug 22 2015, 20:33:39)...loader则是负责加载模块,必须实现一个load_module()的方法。 importer 则指一个对象,实现了finder和loader的方法。

1.5K20

Python中的模块和包

my_module import my_module import my_module import my_module import sys print(sys.modules) # sys.modules...__ 当文件被当做脚本执行时: __name__ 等于__main__ 当文件被当做模块导入时: __name__等于模块名 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者在模块文件中测试代码...a, b = b, a+b print() if __name__ == "__main__": print(__name__) num = input('num :'...(当前 执行文件的名称空间对应的内存),如果有则直接引用 ​ ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看 如果还没有找到就从sys.path给出的目录列表中依次寻找...register_models models.register_models('mysql') register_models('mysql') from glance.api import * 想从包api中导入所有,实际上该语句只会导入包

75020

简单谈谈python的反射机制

__ == '__main__': run()   首先说明一下getattr函数的使用方法:接收2个参数,前面的一个对象或者模块,后面的一个字符串,注意了!...接下来,最关键的obj = __import__(modules)这一行,让程序去导入了modules这个变量保存的字符串同名的模块,并将它赋值给obj变量。   ...如果我们的目录结构这样的:    那么在visit的模块调用语句中,必须进行修改,我们想当然地会这么: def run(): inp = input("请输入您想访问页面的url: ").strip...比如用户输入了somemodules/find,由于实际上不存在somemodules这个模块,必然会报错!那有没有类似上面hasattr内置函数这么个功能呢?答案没有!...import sys my_moudle = sys.modules[__name__] #当前py文件里的模块 def a(): print('a') def b(): print

1.5K50
领券