2017-06-13 70 views
3
def Func(): 
    pass 

在IPython會話中,當我輸入type(Func)時,輸出是「function」。由於Python是一種面向對象的語言,我假設有一類「Func」是一個實例。所以,我想創造我自己的階級是這樣的:Python - 功能類別

class MyFunc(function): 
    pass 

唉,解釋只是把一個「NameError」抱怨「功能」沒有定義。 所以,我想是一個小聰明,這樣做:

class myfunc(func.__class__): 
    pass 

唉,悲慘地失敗了......

TypeError: Error when calling the metaclass bases 
    type 'function' is not an acceptable base type 

總之,任何人都可以解釋: 1)。如何創建一個從「函數」類型派生的類。如果不可能,爲什麼? 2)。那個錯誤信息真的意味着什麼。

+0

感謝這個問題 - 我從來沒有想過要這樣做 – Ben

+0

Python是一個兔子洞,innit? –

+3

但我認爲這是回答這個答案:https://stackoverflow.com/a/10114382/2958070。特別是[此鏈接](http://grokbase.com/t/python/python-list/033r5nks47/type-function-does-not-subtype#20030324rcnwbkfedhzbaf3vmiuer3z4xq) – Ben

回答

0

總之,任何人都可以解釋:1)。如何創建一個從「函數」類型派生的類。

你不行。

如果不行,爲什麼? 2)。那個錯誤信息真的意味着什麼。

該錯誤消息意味着Python不會讓類使用函數類型作爲基類。用C實現的類只有在設置了特定的標誌時才能被擴展;如果他們不這樣做,那麼當您嘗試擴展它們時,就會出現這種錯誤。