On 23Jan2015 20:37, Alan Gauld <alan.ga...@btinternet.com> wrote:
On 23/01/15 11:47, jarod...@libero.it wrote:
Thanks so much for clear explanation!!! So in this way work .
In [38]: Test().x.__name__
Out[38]: 'x'
The decoratory proprerty dosen't help to create the class in fast way.. When
it is advisable use @property?

Very rarely, and mainly when you need to access a number of attributes some of which are pure data and others are derived via a method. You can make the methods look like data by making them properties.

In 18 years of using python I've used @property about 3 or 4 times in
real projects. [...]

By contrast, I use it a far bit (though still far less than non-property methods). Generally for derived properties which are:

 - cheap to compute i.e. O(1)

 - which I want to abstract from the things from which it is computed,
   so that the user need not know the object internals (which also leaves
   you freer to change those internals later should the need arise)

 - usually represent some property which is stable, such as a size

 - occasionally (much more rarely) a property which is not stable, eg:
     @property
     def active(self):
       return self._users > 0

Here's an example (from real code) where I keep (externally) a dict which maps from node keys to nodes, for fast access and to avoid making more than one node for the same key.

 class URI_Node(object):

   def __init__(self, method, uri):
     self.method = method
     self.uri = uri

   @property
   def key(self):
     return self.method, self.uri

Here the .key property happens to be a (method, uri) tuple. Might change in the future if that is not enough to uniquely identify the node.

Cheers,
Cameron Simpson <c...@zip.com.au>

Surely it was of this place, now Cambridge but formerly known by the name of
Babylon, that the prophet spoke when he said, 'the wild beasts of the desert
shall dwell there, and their houses shall be full of doleful creatures, and
owls shall build there, and satyrs shall dance there.'
       - Thomas Gray (1716-1771)
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to