2016-10-29 31 views
-2

一個簡單的例子使用一個對象作爲本身是這樣的:如何在類

class abs_obj: 
    def __init__(self, acceptType = abs_obj): 
     # do something 
     pass 

這給錯誤消息:

NameError: name 'abs_obj' is not defined 

任何建議?

+0

如果我嘗試這樣:acceptType ='abs_obj',那麼acceptType只是一個字符串。 –

+0

這個問題不是關於註釋,不知道爲什麼要將它作爲[this one]的副本關閉(http://stackoverflow.com/q/33533148/364696)。 – ShadowRanger

+1

這聽起來像一個XY問題。你使用'acceptType'做什麼?你可以使用'self .__ class__'(或'type(self)')來獲得對'self'實際類的引用。你需要人們能夠通過一個完全不同的課程嗎? – ShadowRanger

回答

0

這裏的問題是,直到所有方法都編譯完成之後,才真正創建類,但是在編譯時計算一次默認值。

可能可以指定一個不同的默認值,然後通過操作函數的func_defaults屬性將其更改爲所需的值。但是這很醜陋,並且不能保證可以在所有Python實現中工作。

的更常見的方式來解決這樣的問題是:

def __init__(self, acceptType = None): 
    if acceptType is None: 
     acceptType = abs_obj 
    # do something 
    pass 

如果沒有一個是該參數的有效值,你就必須選擇一些其它的值作爲默認值。