我有一個python源文件,其中定義了一個類,並從另一個模塊中導入了一個類。從本質上講,這種結構:限制.py文件中的哪些類可以從其他地方導入
from parent import SuperClass
from other import ClassA
class ClassB(SuperClass):
def __init__(self): pass
我想要做的就是看這個模塊中用於在那裏定義的所有類,只有找到ClassB的(和忽略ClassA的)。 ClassA和ClassB都擴展了SuperClass。
原因是我有一個在運行時加載的插件目錄,我通過在每個.py文件上進行自省並加載擴展超類的類來獲得插件類的完整列表。在這種特殊情況下,ClassB使用插件ClassA爲它做一些工作,所以依賴於它(ClassA同時不依賴於ClassB)。問題是,當我從目錄中加載插件時,我得到2個ClassA實例,因爲它從ClassA的文件中獲得一個,而從ClassB的文件中獲得一個。
對於包有辦法:
__all__ = ['module_a', 'module-b']
明確列出可以導入的模塊,但住在__init__.py
文件,每個插件是一個.py文件不在目錄它自己的權利。
那麼問題是:我可以限制訪問.py文件中的類,還是必須使它們中的每一個都具有其自己的init文件的目錄?或者,還有其他一些聰明的方法可以區分這兩個類嗎?
re:「for packages ...」,好點,我編輯了這個問題 –
我沒有意識到你可以把'__all__'放在模塊中 - 有用的知道,謝謝。不幸的是,這並沒有抓住這個特殊的癢。但是,檢查課程來自模塊可能工作的相同文件 - 將不得不調查如何做到這一點! –
太棒了!謝謝。 –