This is a mess...

Piet van Oostrum piet at cs.uu.nl
Thu Jul 16 16:01:22 EDT 2009


>>>>> Nick <nleioatt at gmail.com> (N) wrote:

>N> this is the new oop version, its pretty messy currently, and i do
>N> understand it is a simple routine, but i'm using it as an exercise to
>N> learn oop python...

>N> first the (current) traceback:
>N>  [:~/python]$  python oop_covariance.py b2ar_all_test b2ar_all_test
>N> <Eigen.Eigen_vect instance at 0x7fa26c404ab8>
>N> <Eigen.Eigen_vect instance at 0x7fa26c404ab8>
>N> Traceback (most recent call last):
>N>   File "oop_covariance.py", line 24, in <module>
>N>     cov = set1.covariance(set2, Eigen_vect.dot)
>N>   File "/home/nleioatts/python/Eigen.py", line 66, in covariance
>N>     print self.vectors[i][i]
>N> AttributeError: Eigen_vect instance has no attribute '__getitem__'

self.vectors is a list of Eigen_vect objects. So self.vectors[i] is an
Eigen_vect object. Now you do a subscript on this Eigen_vect object but
you have not defined what that means. Presumably you want it to do the
subscript on the self.e_vect in the Eigen_vect instance. Therefore you
have to define the __getitem__ method in the Eigen_vect class.


class Eigen_vect:
    def __init__(self, e_val, e_vect):
        self.e_val  = e_val
        self.e_vect = e_vect
    def length(self):
        return len(self.e_vect)

    def __getitem__(self, indx):
        return self.e_vect[indx]

I hope I did not make a mistake, I didn't check it because I don't want
to make test input files.
-- 
Piet van Oostrum <piet at cs.uu.nl>
URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4]
Private email: piet at vanoostrum.org



More information about the Python-list mailing list