如何扩展或修补内置模块

时间:2014-06-06 05:45:48

标签: python

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

首先我在文件夹(命名空间)'dqa_fileio / config'

下创建了一个'json.py'文件

所以当其他人想要使用我的模块时,应该由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])

3 个答案:

答案 0 :(得分:1)

那不行,因为你认为python应该知道选择哪一个?

只要您希望import json导入正确的模块, 就可以选择其他名称。

查看here以获取有关同一类型问题的更多信息。

答案 1 :(得分:1)

我建议的另一件事是使用包。

json.py模块放入某种软件包中。

e.g:

common
|-__init__.py
|-json.py

common放入您的PYTHONPATH和/或将其与您的团队可以在其项目中安装和使用的相应setup.py很好地打包。

然后导入它:

from common import json

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

答案 2 :(得分:0)

问题是python认为import json只是导入自己,而你的类没有加载方法。解决这个问题的唯一方法是更改​​文件名,或使用一些非常规的循环导入。