0
例如,如果這個碼被包含在一個叫做some_module蟒命名空間層次結構上述目的
class C:
class C2:
def g(self):
@printNamespaceAbove
def f():
pass
模塊中
然後printNamespaceAbove將被定義,使得該代碼將輸出像
[some_module,C,C2,g]
例如,如果這個碼被包含在一個叫做some_module蟒命名空間層次結構上述目的
class C:
class C2:
def g(self):
@printNamespaceAbove
def f():
pass
模塊中
然後printNamespaceAbove將被定義,使得該代碼將輸出像
[some_module,C,C2,g]
有沒有辦法讓代碼如上所述,有任何輸出 - g的主體(包括你想要打印的裝飾器)不會執行直到g被調用。我假設你並不是真的打算單獨輸出「this code」來輸出任何內容,而是打算添加一個諸如C.C2()。g()這樣的調用,這將實際上完成輸出。
有沒有真正做到這一點非常有效的方式 - 你(當然,裝飾;-)必須在模塊級(您可以通過f
的全局識別開始,裝飾的說法:它的名字是f.func_globals['__name__']
並通過它的名字你可以在sys.modules
中查找它),那麼你必須沿着每一個可能的名字鏈,直到你找到你的調用函數(例如通過標準庫中的inspect模塊)。還要注意,嵌套函數在幾個角落案例中特別令人頭疼。