這個問題在這里已經有了答案: 我應該從 __dir__ 方法隱藏 python 模塊中的依賴項匯入嗎? (1 個回答) 我應該如何在不污染其命名空間的情況下在 python 模塊中執行匯入? (6 個回答) 昨天關閉。
我正在制作一個 python 包來運行 Pandas 分析,并且我在包中的大多數檔案中使用了 Pandas 物件。我如何匯入這些函式,以便它們在包中可用,但不會使用戶的命名空間混亂?假設我有這個目錄結構:
MyThing/
MyThing/
__init__.py
apis.py
MyClass.py
whereMyClass.py提供了一個類,我將實體化以處理記憶體中的資料,并apis.py具有到本地和遠程資料庫的介面。作為演示,說__init__.py包含
from MyThing.MyClass import MyClass
from MyThing.apis import DBInterface
的內容MyClass.py是
class MyClass:
def __init__():
pass
并且apis.py是
import pandas as pd
class DBInterface:
def __init__():
pass
有了完整的代碼,我希望用例看起來像這樣
import MyThing as mt
# get some data
interface = mt.DBInterface()
some_data = interface.query(parameters)
# load it into MyThing
instance = mt.MyThing(some_data)
# add new data from another source
instance.read(filename)
# make some fancy products
instance.magic(parameters)
# update the database
interface.update_db(instance)
我擔心的是,這會dir(mt.apis)顯示我匯入的所有內容,這意味著我可以使用df = mt.apis.pd.DataFrame(). 這是它應該如何作業?我是否應該使用import不同的方式,以便命名空間不會因依賴項而雜亂無章?我是否應該以不同的方式設計包,以便匯入時依賴項不可用MyThing?
uj5u.com熱心網友回復:
你在做什么很好,它應該如何作業,我不建議努力隱藏你的熊貓匯入。
解決辦法df = mt.apis.pd.DataFrame()是:不要那樣做。
如果Mything.apis您不希望其他人使用其中的函式或變數,您可以在它前面加上一個下劃線(例如_foo)。按照慣例,這被理解為供“內部使用”使用,并且不會在您這樣做時匯入from Mything.apis import *。有關此類命名約定的更多資訊,請參閱PEP-8 樣式指南的這一部分。
如果您想更明確地了解您的模塊匯出的內容,您可以像這樣定義它們__all__ = ['foo', 'bar']。這也使得如果您或某人這樣做from Mything.apis import *(無論如何這通常是不明智的),他們只會匯入fooand bar,但您應該將其視為僅僅是建議,就像領先的下劃線約定一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313020.html
上一篇:將寬資料合并為長數??據幀格式R
