2016-07-15 31 views
-2

內實例變量自當讓我們說我有這樣「自我」沒有定義欲以

class A: 
    var1 = self.var0 

    def __init__(self, var0): 
    self.var0 = var0 

代碼我怎麼可能會self.var0到VAR1沒有把var1的初始化函數裏面?如果你想有兩個變量與

class A: 

    def __init__(self, var0): 
    self.var1 = var0 

+4

你期望'self'在那個點上?你爲什麼不想把它放在'__init__'中? – mgilson

回答

1

你,我能想到的兩個選項:

1)包括在初始化函數,如果你想與A.var1 = var0創建一個A對象:

class A: 

    def __init__(self, var0): 
    self.var0 = var0 
    self.var1 = self.var0 

2 )如果你真的不想初始化函數裏面VAR1,您可以創建一個函數,是的,像這樣一類部分:

class A: 

    def __init__(self, var0): 
    self.var0 = var0 

    def setVar1(var1): 
    self.var1 = var1 

然後創建一個對象並設置其V1值等於v0,你會的做這樣的事情:

v0 = some_value 
a = A(v0) 
a.setVar1(v0) 

編輯:

3)在評論中所建議的 「Blckknght」 在其他的答案中的一個:你可以連續使用賦值語句:

self.var0 = self.var1 = var0 
0

試試這個:

class A: 

    def __init__(self, var0): 
    self.var1 = self.var0 = var0 

不過,我看不出有什麼意義這一點,寧願簡單地立即初始化它像這樣相同的價值,堅持第一種方法。

+1

你也可以鏈分配:'self.var0 = self.var1 = var0' – Blckknght

+0

是的,當然。好主意,我會補充說。 –

0

在您的代碼中var1 = self.var0處於類級別,而不是實例級別,因此self在此處沒有意義。要看到它,請試試這個:

class C(object): 
    field1 = 1 

    def __init__(self): 
     self.field2 = 2 

print(C.field1) 
print(C.field2) # should raise an exception 
instance = C() 
print(instance.field1) # not found in instance but found at upper level (class-level) 
print(instance.field2) 
相關問題