簡體   English   中英

python對象上方的命名空間層次結構

[英]python namespace hierarchy above object

例如,如果此代碼包含在名為some_module的模塊中

class C:
    class C2:
        def g(self):
            @printNamespaceAbove
            def f():
                pass

然后將定義printNamespaceAbove,以便此代碼將輸出類似

[some_module,C,C2,g]

有沒有辦法讓這個代碼,提交,有任何輸出-克的身體(包括你想要做印刷裝飾)根本執行,直到G稱為。 我假設您實際上並不打算單獨使用“此代碼”來輸出任何內容,而是打算添加諸如C.C2()。g()之類的調用[實際上將執行輸出]。

確實沒有一種非常有效的方法-您(好,裝飾器;-)必須從模塊級別開始(您可以通過裝飾器參數f的全局變量來識別它:它的名稱為f.func_globals['__name__']並通過其名稱可以在sys.modules查找它,然后必須遍歷所有可能的名稱鏈,直到找到調用函數為止(例如,通過標准庫中的inspect模塊)。 還要注意,嵌套函數在某些特殊情況下尤其令人頭疼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM