2014-12-06 72 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