在看moco源码时发下有个这样的代码不知道咋用的,复现了一下
model = moco.builder.MoCo( # 这种初始化模型的方式是因为导包的时候导到了moco这一层
models.__dict__[args.arch],
args.moco_dim, args.moco_k, args.moco_m, args.moco_t, args.mlp)
print(model)
具体复现过程如下:
1、文件夹目录如下:只需要红框框住的这三个.py文件就行,test文件夹下有一个__init__.py的启动文件,和一个test2.py文件,test.py文件和test文件夹目录同级
2、test文件夹下:
2.1 init.py文件夹中的代码如下:
from .test2 import *
2.2 test2.py文件中的代码如下:
__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101']
def ResNet():
print('ResNet')
def resnet18():
print('resnet18')
def resnet34():
print('resnet34')
def resnet50():
print('resnet50')
def resnet101():
print('resnet101')
3、test.py中的代码如下:
import test
class Test:
def __init__(self, model_name='', age='', sex=''):
self.model_name = model_name
self.age = age
self.sex = sex
print('self.model_name', self.model_name)
print('self.age', self.age)
print('self.sex', self.sex)
new_test = Test(test.__dict__['resnet50'], '18', 'boy')
print('----------')
test.__dict__['resnet50']() # 调用函数
print(new_test.model_name) # 函数对象
new_test.model_name() # 调用函数
4、执行test.py文件结果如下:
5、从上边可以看出来,只要是建立了文件夹并其中有__init__.py(包)就可以使用包名.dict[‘包中的内容’]这种方式例如test.dict[‘resnet50’]。