- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解一段 Python 代码。
首先,我有以下文件结构:
folder1--
model
__init__.py
file1.py
file2.py
__init__.py
__init__.py
在文件夹folder1 中什么都没有。
__init__.py
在文件夹模型中有以下内容:
import os
files = os.listdir(os.path.split(os.path.realpath(__file__))[0])
files.remove('__init__.py')
for file in files:
if file.endswith('.py'):
exec('from .{} import *'.format(file[:-3]))
话虽如此,我在python中有一些使用上述所有内容的代码
from folder1 import model as mymodel
我的第一个问题是这是做什么的?我的意思是模型是一个文件夹名称,对吗?它不是一个对象。或者是吗?究竟是什么导入为
mymodel
这里?
global args, cfg, is_fov120
args = parser.parse_args()
model = getattr(mymodel, args.arch)(sync_bn=False)
显然有一些参数叫做
arch
.这里发生了什么,
model
发生了什么?有这之后?
print(mymodel)
我明白了
<module 'folder1.model' from 'C:\\path\\to\\folder1\\model\\__init__.py'>
进一步调查我可以看到我已经从文件夹模型中的文件中导入了所有对象。
mymodel.files
给出文件夹中的文件列表,我可以调用
mymodel.somevariable
如果在 file1.py 或 file2.py 中定义了某个变量。至于类,我必须先创建一个对象,如
x=mymodel.aClass()
然后我可以访问对象
x.someElement
的元素.
getattr
正在从模型内部的文件中获取一个类,我可以猜到
sync_bn=False
是该类的构造函数的参数。
最佳答案
如果您希望将文件夹作为 python 模块,该文件夹必须包含 __init__.py
,即使它是空的。然后你可以导入其余的。
import os
files = os.listdir(os.path.split(os.path.realpath(__file__))[0]) #get the folder's content
files.remove('__init__.py') #remove __init__.py since it is empty
for file in files: #loop through the files
if file.endswith('.py'): #if it is a python file
exec('from .{} import *'.format(file[:-3])) #import
上面的代码,每隔一个
.py
导入一次文件比
__init__
, 为空。
from folder1 import model as mymodel
这里
folder1
是模块,
model
是您从(文件夹)
model
导入的对象在这种情况下,因为它现在被导入到文件夹 1 的
__init__.py
,现在它是 folder1 的一部分(这是一个讨论的模块)。
model = getattr(mymodel, args.arch)(sync_bn=False)
此行等于:
mymodel.attr
, 其中
attr
是对象的所需属性。您能否在
getattr
周围发布更多代码? ,因为我不知道是什么
args.arch
指的是。
getattr
method 得到一个属性,它是一个函数,因为它被调用了,method 是这个函数返回的值。在这种情况下
sync_bn
无关紧要,但了解更多关于
args.arch
仍然会有所帮助。
关于python - 试图理解 __init__.py 结合 getattr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63183234/
Python版本 python -VPython 2.7.9::Anaconda 2.0.1 (x86_64) 如果没有返回或退出,则会出现错误: 第 16 行,正在播放 房间 = getattr(自
使用常规 python,我可以获得 getattr(object, att) 但在 Jinja2 中,我得到: jinja2.exceptions.UndefinedError jinja2.exce
有没有办法获取下面name的变量? def save_info(self): name = 'hello' var1 = 'other item' var2 = 1 .
从python官方文档中,我看到了getattr();的正常表达 getattr(对象,名称[,默认]) 我很明白。例如,我可以这样做: >>> def a(): ... pass ... >
根据我的理解,getattr(object, "method") 等同于 object.method()。如果这是真的,那么使用 getattr 有什么意义? 最佳答案 如果您将属性名称作为字符串,则
因此,在我的代码中使用 getattr 时,我发现了以下内容: myVariable = foo.A.bar 有效...但是像这样: B = "A" myVariable = getattr(foo,
我正在使用一个代码库,其中包含一行我真的无法理解: x, x, z = getattr(ReceiveFile, maxsizes)(input, args) 所以如果最后没有第二个元组,它就是 x,
我一直在深入了解 python 中的 getattr() 函数。从那本书中我知道它与模块一起工作得很好——毫无疑问!我进行了一些测试,但我不知道我将 getattr() 与特定变量一起使用的那段代码有
我有两个类(class)。一个类具有属性 x 但没有 y,另一个类具有属性 y 但没有 x。 我有一个函数接受任一类作为参数。是否有一种单行方法可以将新变量分配给 x 属性(如果存在)或 y 属性(如
我有这个代码; class NumberDescriptor(object): def __get__(self, instance, owner): name = (hasa
我要去 Calling a function of a module from a string with the function's name in Python但是每当我在我的程序中调用我的类时
我有一个简单的用例,我有一个类: class A: def meth1(self, name): ... def meth2(self, name, funcname): #
构造 getattr(obj, 'attr1.attr2', None) 不起作用。替换此结构的最佳做法是什么?将其分成两个 getattr 语句? 最佳答案 您可以使用 operator.attrg
我不知道这是否是 getattr built_in 方法的预期行为。getattr 也会执行默认的(第三个)参数,即使实际参数(第二个)满足条件。示例: def func(): print('
这个问题在这里已经有了答案: Why use setattr() and getattr() built-ins? (5 个答案) 关闭 7 年前。 这段代码有什么区别吗,它使用点符号来访问属性:
我正在尝试使用 Python 的 getattr() 从我无法控制的各种 API 获得的大量对象中提取数据。我的想法是遍历一个异类对象列表,并尝试对它们使用 getattr(),直到我提取出我需要的所
getatter()通过方法名字符串调用方法,这个方法最主要的作用就是实现反射机制,也就是说可以通过字符串获取方法实例,这样就可以把一个类可能要调用的方法放到配置文件里,需要的时候进行动态加载。
编辑:我可能会在这里落入 XY 问题陷阱。这就是我真正想要的 know . 我有以下功能: def foo(): bar = funcToGetBar() return bar.getattr
我正在用 Dojo 1.6 编写一个可以修改属性值的 dojo 函数: function replaceAttributeDojo(obj, attrName, newValue) {
我无法使函数 getattr 工作。这是我的代码: print ConfigConsModel()._meta.get_all_field_names() #['codesectrepmodel',
我是一名优秀的程序员,十分优秀!