如何扩展或修补一个内置的modu

2024-09-29 00:03:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为我的团队编写一个自定义json模块

首先我创造了一个json.py文件'文件夹(命名空间)'dqa_fileio/config'下的文件

所以当其他人想使用我的模块时,应该由import dqa_fileio.config.json调用它

然后,我想创建一个read_file方法来加载一个json文件

但我得到了AttributeError: 'module' object has no attribute 'load'

我认为这是因为file_name被称为json.py文件你说

但是我想保留文件名,有没有像Ruby那样的,我可以打开一个类来扩展它的能力呢?但是看起来json是一个文件夹(名称空间)而不是一个类?如果有任何错误的概念,请纠正我。谢谢

在json.py文件(在名称空间dqa_fileio/config下)

import json 

class Json(object):
    def __init__(self):
        pass
    def read_file(self, file_name):
        return json.load(open(file_name, 'r'))

if __name__ == '__main__':

    Json().read_file(sys.argv[1])

Tags: 模块文件namepyimport文件夹configjson
3条回答

这行不通,因为你认为python应该如何知道应该选择哪一个呢?在

只要您希望import json导入正确的模块,您就可以选择一个不同的名称。在

有关同一类型问题的更多信息,请查看here。在

我唯一建议的就是使用一个软件包。在

将您的json.py模块放入某种包中。在

例如:

common
|-__init__.py
|-json.py

common放入PYTHONPATH中,并/或使用合适的setup.py将其打包,您的团队可以在其项目中安装和使用。在

然后按如下方式导入:

^{pr2}$

参见:https://docs.python.org/2/tutorial/modules.html

问题是python认为import json只是导入自身,而您的类没有load方法。解决这个问题的唯一方法是更改文件名,或者使用一些非常不规则的循环导入。在

相关问题 更多 >