首页 > 解决方案 > 从包中导入只有一个公共成员的子模块时避免重复名称

问题描述

基本设置

假设我想创建一个名为Foo. 我可以像这样创建一个文件:

foo.py

class Foo:
    def __init__(self):
        self.data = "world"
    def print(self):
        print("Hello, " + self.data)

在我的主脚本中使用这个类:

主文件

import foo

test = foo.Foo()
test.print()

foo.Foo()每次实例化类时都必须输入已经感觉很荒谬,但是当我想通过将我的类分成一个包来组织我的代码时,情况会变得更糟:

类/__init__.py

# Empty

类/foo.py

# Copy of foo.py, above

主文件

import classes.foo

test = classes.foo.Foo()
test.print()

简单的答案

我知道我可以通过这样使用来清理它from X import Y

from classes.foo import Foo

test = Foo()

首选答案

因为该文件仅foo.py包含一个名称与该文件匹配的成员,所以我希望可以执行以下操作:

from classes import Foo
# Or:
import classes.Foo as Foo

test = Foo()

有没有办法做到这一点?也许在我的一些代码__init__.py

标签: python

解决方案


classes/__init__.py中,输入:

from .foo import Foo

现在你可以写了from classes import Foo


推荐阅读