清除 python 导入语句
Clean python import statements
我已经为 REST API 创建了一个 python 包装器。 API 有很多端点,所以我为每个端点创建了一个文件。
一般的想法是用户可以做这样的事情
from my_package import Client
from my_package.endpoints import Users
prod = Client("myhostname.com", "Username", "Password")
all_users = Users(prod).list()
我的包的文件目前结构如下
my_project/
└-- my_package/
| └-- __init__.py
| └-- client.py
| └-- const.py
| └-- endpoints/
| └-- __init__.py
| └-- contracts.py
| └-- credits.py
| └-- payments.py
| └-- users.py
└-- setup.cfg
└-- readme.md
└-- pyproject.toml
# my_package/__init__.py
from my_package.client import Client
# my_package/endpoints/__init__.py
from my_package.endpoints.contracts import Contracts
from my_package.endpoints.creditsimport Credits
from my_package.endpoints.paymentsimport Payments
from my_package.endpoints.usersimport Users
现在的问题是,当您导入时,通过智能感知为您提供了很多重复项。
from my_package.endpoints import contracts
Contracts
credits
Credits
payments
Payments
users
Users
我该如何清理它?
我认为这是正确的行为。要仅将智能感知建议减少到 class 名称,您需要将模块移动到另一个包。
例如
my_project/
└-- my_package/
└-- __init__.py
└-- client.py
└-- api
| └-- endpoints.py
└-- endpoints/
└-- __init__.py
└-- contracts.py
└-- credits.py
└-- payments.py
└-- users.py
# my_package/endpoints/__init__.py
# my_package/api/endpoints.py
from my_package.endpoints.contracts import Contracts
from my_package.endpoints.creditsimport Credits
from my_package.endpoints.paymentsimport Payments
from my_package.endpoints.usersimport Users
from my_package.api.endpoints import Contracts
Credits
Payments
Users
当然,您可以为包命名不同的名称或选择适合您需要的其他结构。例如,您可以将 contracts.py
和朋友移动到 impl
子包中,并保留 endpoints/__init__.py
文件,其中只包含稍微修改过的导入。或者您可以将 contracts.py
和朋友移动到另一个包。选项数量不限。
重点是智能感知总是建议您给定模块中的所有名称。无论它们是子模块名称、class 名称还是任何其他名称。这就是用户通常想要的,也是他们习惯的。我们通常使用文档作为在我们的库中导航用户的方式,而不是智能感知。但是如果这些建议对你来说真的很重要,你必须把名字移到模块之外。 (或者使用导入系统和 dunder 属性做一些丑陋的把戏。)
我已经为 REST API 创建了一个 python 包装器。 API 有很多端点,所以我为每个端点创建了一个文件。
一般的想法是用户可以做这样的事情
from my_package import Client
from my_package.endpoints import Users
prod = Client("myhostname.com", "Username", "Password")
all_users = Users(prod).list()
我的包的文件目前结构如下
my_project/
└-- my_package/
| └-- __init__.py
| └-- client.py
| └-- const.py
| └-- endpoints/
| └-- __init__.py
| └-- contracts.py
| └-- credits.py
| └-- payments.py
| └-- users.py
└-- setup.cfg
└-- readme.md
└-- pyproject.toml
# my_package/__init__.py
from my_package.client import Client
# my_package/endpoints/__init__.py
from my_package.endpoints.contracts import Contracts
from my_package.endpoints.creditsimport Credits
from my_package.endpoints.paymentsimport Payments
from my_package.endpoints.usersimport Users
现在的问题是,当您导入时,通过智能感知为您提供了很多重复项。
from my_package.endpoints import contracts
Contracts
credits
Credits
payments
Payments
users
Users
我该如何清理它?
我认为这是正确的行为。要仅将智能感知建议减少到 class 名称,您需要将模块移动到另一个包。
例如
my_project/
└-- my_package/
└-- __init__.py
└-- client.py
└-- api
| └-- endpoints.py
└-- endpoints/
└-- __init__.py
└-- contracts.py
└-- credits.py
└-- payments.py
└-- users.py
# my_package/endpoints/__init__.py
# my_package/api/endpoints.py
from my_package.endpoints.contracts import Contracts
from my_package.endpoints.creditsimport Credits
from my_package.endpoints.paymentsimport Payments
from my_package.endpoints.usersimport Users
from my_package.api.endpoints import Contracts
Credits
Payments
Users
当然,您可以为包命名不同的名称或选择适合您需要的其他结构。例如,您可以将 contracts.py
和朋友移动到 impl
子包中,并保留 endpoints/__init__.py
文件,其中只包含稍微修改过的导入。或者您可以将 contracts.py
和朋友移动到另一个包。选项数量不限。
重点是智能感知总是建议您给定模块中的所有名称。无论它们是子模块名称、class 名称还是任何其他名称。这就是用户通常想要的,也是他们习惯的。我们通常使用文档作为在我们的库中导航用户的方式,而不是智能感知。但是如果这些建议对你来说真的很重要,你必须把名字移到模块之外。 (或者使用导入系统和 dunder 属性做一些丑陋的把戏。)