Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python文件中公开/导出类而不是模块_Python - Fatal编程技术网

从python文件中公开/导出类而不是模块

从python文件中公开/导出类而不是模块,python,Python,我正在探索Python以及如何构造代码 考虑以下项目结构 <project root>/controllers/user_controller.py 从外部导入此文件时,其结果为 import controllers.user_controller controller_instance = controllers.user_controller.UserController() 作为一名Ruby开发人员,如果控制器文件夹是加载路径的一部分,那么执行controllers.Us

我正在探索Python以及如何构造代码

考虑以下项目结构

<project root>/controllers/user_controller.py
从外部导入此文件时,其结果为

import controllers.user_controller

controller_instance = controllers.user_controller.UserController()
作为一名Ruby开发人员,如果控制器文件夹是加载路径的一部分,那么执行
controllers.UserController()
或者只执行
UserController()
,感觉更自然,就像在Rails中一样

有没有(干净的)方法可以省略包名?我知道我可以从controllers.user\u controller导入UserController,但我真的不喜欢冗长


我希望每个类有一个python文件,但我不希望每个类都有一个新模块。

一种方法就是将模块导入父模块。换句话说,假设您有一个这样的目录结构:

mycoolmodule/
mycoolmodule/__init__.py
mycoolmodule/coolclass.py
mycoolmodule/coolutil.py
coolclass.py的代码

class CoolClass(object):
    ...
class CoolUtil(object):
    ...
coolutil.py的代码:

class CoolClass(object):
    ...
class CoolUtil(object):
    ...
\uuuu init\uuuu.py的代码

from coolclass import CoolClass
from coolutil import CoolUtil
由于您在包级别提供了它们,现在可以直接从那里导入它们。例如,这将起作用:

from mycoolmodule import CoolClass

您是否反对将controllers.user\u controller导入为ctrl?是的,我认为ctrl.UserController()读起来不太好。