有什麼辦法可以將靜態方法應用於給定類的所有方法。任何方式將staticmethod應用於所有類方法?
我在想我們可以訪問其元類中的方法(在新的元類)並應用staticmethod,但我不知道語法。任何人都可以闡明這一點嗎?
有什麼辦法可以將靜態方法應用於給定類的所有方法。任何方式將staticmethod應用於所有類方法?
我在想我們可以訪問其元類中的方法(在新的元類)並應用staticmethod,但我不知道語法。任何人都可以闡明這一點嗎?
雖然a module (as suggested by mgilson)是一個更好的選擇,如果你真的有這個(我想不出一個的)很好用的,它與the inspect
module,也比較容易一類裝飾:
import inspect
def staticmethods(cls):
for name, method in inspect.getmembers(cls, inspect.ismethod):
setattr(cls, name, staticmethod(method.__func__))
return cls
@staticmethods
class Test:
def test():
print("Test")
Test.test()
所有類裝飾的作用是循環通過在物體上的方法與inspect.getmembers()
,然後重寫與原始(未結合的)函數的staticmethod()
功能。
請注意,我會爲此使用一個模塊而不是類,也可能只是在每個函數上以這種方式手動調用@staticmethod
(因爲這例如會中斷編輯器的檢查)。這個答案被證明是可能的,因爲這是一個非常簡單的實現。
mgilson's answer是最好的,但要加這是經常用於定義一個類,命名空間另一種模式,你也可以實例化類,覆蓋類名稱:
class Test:
def a_static_method(self, arg1, srg2):
pass
Test = Test()
要知道,雖然,此後Test
實際上是一個類實例,根據您的使用方式可能會產生誤導。
這是狡猾的... – mgilson 2013-02-15 16:53:25
謝謝,這是我想要的 – Neil 2013-02-16 16:35:28