On 23/01/15 01:44, jarod...@libero.it wrote:

How can gave the attributes __name__ to a function?

You don't Python does it for you.


class Foo(object):

     def __init__(self):
         steps = {}
         tmp = open("rnaseq.base.ini","rb")
         config.readfp(tmp)
         readsets = 
parse_illumina_readset_file("/home/mauro/Desktop/readset.csv")

You realise that steps is a local variable that is not used and gets thrown away. So its a waste of space.
Similarly you read the config file but throw away the results.
Again a waste of space.
And the same with readsets.
Your init does a lot of work to no long term effect.

     @property
     def steps(self):
         return [

             self.one,
             self.two,
             self.fmit,
         ]
     def one(self):
         a = 5
         return a
...
     #@property
     def show(self):
         ftp="\n".join([str(idx + 1) + "- " + step.__name__  for idx, step in 
enumerate(self.steps)])

         print ftp
It is working

In [5]: F =  Foo()

In [6]: F.show()
1- one
2- two
3- fmit

Yes, as expected.

Why if I define the data in the same way  I have this error?

<ipython-input-83-a3c57022a089> in <module>()
----> 1 rna.show()

<ipython-input-79-b1a3b6d221ae> in show(self)
     261         #@property
     262         def show(self):
--> 263                 ftp="\n".join([str(idx + 1) + "- " + step.__name__  for 
idx, step in enumerate(self.steps)])
     264
     265                 print ftp

AttributeError: 'str' object has no attribute '__name__'

Because you didn't define it in the same way.

Consider this example from the pastebin:

       @property
        def star(self):
                print "Mitico Star"
                return "name"


Here you make star a property so when in steps you store self.star you are not storing a reference to the method, as you did above, you are storing the return value of star - "name".

Now in show() you try to take the __name__ of "name" but, as the error says, strings don't have __name__ attributes.

The same applies to some, but not all, of the other method names in steps...

You would make life much easier if you got rid of all the property stuff (some of it commented out and others not). Just use the
methods and data attributes directly, it makes life so much easier.


Here you find all the other code the principal are the 
same:http://pastebin.com/nYGEiXY4


HTH
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to