如何在两个模块中区分两个同名方法,但在一个文件中使用时

时间:2016-12-24 11:24:43

标签: python django

我有一个名字' add_member_address'在两个地方,但功能不同。
下面给出第一种方法,该方法在视图中定义。

APP-INF/lib

现在当流程到达内部@login_required(login_url='/accounts/login/') def add_member_address(request, member_id): if request.method == "GET": pass else: data = request.POST add_member_address(data, member_id) #<-this method is defined in another file. 时,它会尝试仅调用此外部方法。所以我试着给出这种内在方法的完整路径来区分。

add_member_address

其中租户是我的应用程序的名称,已在设置文件中注册。但是现在抛出了这个错误。

tenant.services.address_services.add_member_address(data, member_id)

文件夹结构:

name 'tenant' is not defined

project ->tenant ->services -> __init__.py -> address_services.py -> here is this add_member_address(data, member_id) method -> other_services.py ->views ->members.py ->here is this add_member_address(request, member_id) method 文件中,所有服务都按以下方式导入

service/__init__.py

请建议我 1.如何在同一文件中使用时,如何区分两个相同名称但在两个不同模块中的方法 2.如何使用完整路径的方法而不是在文件顶部导入。

2 个答案:

答案 0 :(得分:3)

只需重命名一个,或只导入模块并将该函数作为属性查找。

您可以在import声明中重命名导入的名称:

from .address_services import add_member_address as add_address

# use add_address(data, member_id)

改为使用模块名称:

from . import address_services

# use address_services.add_member_address(data, member_id)

如果您发现后者过于冗长,请记住您也可以重命名模块参考:

from . import address_services as as_

# use as_.add_member_address(data, member_id)

答案 1 :(得分:0)

导入所有内容无论如何都不是一种好习惯。

from .address_services import add_member_address as add_member_address_address_services
from .tag_services import add_member_address as add_member_address_tag_services

或类似的东西。