2012-08-03 42 views
1

我正在Python 2.7中開發一個程序,發現自己試圖在同一個類中傳遞一個Python類字段作爲參數。雖然我修改了我的代碼以使其更清潔(從而消除了此構造的需要),但我仍然好奇。爲什麼我不能將Python類字段作爲參數傳遞?

對於一些實例中(巨大簡化,但概念是存在的):

[注意:對於實施例1和2中,假設我想任取一個數作爲輸入,並增加它,或增加當前值]

實施例1

class Example: 
    def __init__(self,x): 
     self.value = x 
    def incr(self,x=self.value): 
     self.value = x + 1 

結果:

"NameError: name 'self' is not defined" 

例2.

class Example: 
    def __init__(self,x): 
     self.value = x 
    def incr(self,x=value): 
     self.value = x + 1 

結果:

"NameError: name 'value' is not defined" 

例3

class Example: 
    def __init__(self,x): 
     ex2 = Example2() 
     self.value = ex2.incr(x) 
    def get_value(self): 
     return self.value 

class Example2: 
    def __init__(self): 
     self.value = 0 
    def incr(self,x): 
     return x + 1 

ex = Example(3) 
print ex.get_value() 

結果:

4 

要重申我的問題,我爲什麼不能傳遞一個Python類字段作爲它自己的參數方法?

如果您有任何其他問題或需要更多信息,請告知我們。謝謝!

+2

您的問題? http://stackoverflow.com/questions/1802971/nameerror-name-self-is-not-defined – russ36363 2012-08-03 22:18:21

回答

3

方法默認值是在定義方法時評估的,而不是在調用方法時評估。此時該類仍在定義中,因此不存在該類型的對象。因此您不能使用self

可以使用具有None默認值和測試這個你的方法內部的解決辦法:可能

def incr(self,x=None): 
    if x is None: 
     x = self.value 
    self.value = x + 1 
+0

謝謝,我現在回想起當我第一次學習Python時聽到的一些事情...... – 2012-08-03 23:07:47

相關問題