2014-12-06 71 views
0

我的目標是在類Delta中創建一個名爲anotherVar的方法,該方法向現有數組添加一個數組,該數組可以從派生類調用(在此例中爲MyClass1 )。將向量附加到派生類屬性的父方法

我在這裏寫的代碼並沒有完成這個。我哪裏錯了?據推測這是我的定義anotherVar

import numpy as np 

class Delta(object): 
    def anotherVar(self): 
     return np.vstack(self) 

class myClass1(Delta): 
    def __init__(self, *myVars): 
     self.__myArray = np.vstack(myVars) 
    @property 
    def myArray(self): 
     return self.__myArray 

someVars1 = [1,2,3] 
someVars2 = [4,5,6] 
someVars3 = [7,8,9] 
myResult = myClass1(someVars1,someVars2,someVars2) 
myResult.anotherVar = someVars3 
print myResult.myArray 

[[1 2 3] 
[4 5 6] 
[4 5 6]] 

回答

2

有2個問題,你的原代碼:

  1. 重新綁定Delta標識anotherVar給一個變量。最有可能的,你想叫

    myResult.anotherVar(someVars3) 
    

    而不是

    myResult.anotherVar = someVars3 
    

    因爲後者重新綁定方法anotherVar給變量someVars3

  2. 當您使用雙下劃線時,您正在使用名稱修飾。如果僅僅是建立一個屬性/方法「private」,你不應該。任何在屬性前面看到單個下劃線的開發人員都會明白它可能會發生更改,因此不應該依賴於公共API。

Delta改變2號線和不斷變化的雙下劃線爲單下劃線後,您的代碼工作,你希望:

import numpy as np 

class Delta(object): 
    def anotherVar(self, arr): 
     self._myArray = np.vstack((self._myArray, arr)) 

class myClass1(Delta): 
    def __init__(self, *myVars): 
     self._myArray = np.vstack(myVars) 
    @property 
    def myArray(self): 
     return self._myArray 
+0

當然。我看到您強調的呼叫/重新綁定問題。謝謝。 – mark 2014-12-07 00:35:16