On Thu, Jun 16, 2011 at 10:35 PM, Micky Hulse <rgmi...@gmail.com> wrote:
> Just to clarify things for me, does attribute equal a property or method? :D
>
> I am guessing that attribute = property, so you're saying that I
> could/should do this:
>
> @property
> def separator(self):
>    return ' :: '
>

No, he's saying that is ridiculous overkill for a constant attribute.

class MyModel(models.Model):
  SEPARATOR = '::'

Access it with MyModel.SEPARATOR or my_model_instance.SEPARATOR

I use property() when either the setting or modification of an
attribute requires me to run actual code in order to manipulate the
supplied value into a different format. Eg, if I am storing a comma
separated list of IP addresses as strings in a database field, I don't
want to have to deal with splitting, parsing and turning it into a
list of proper objects in every different place. Instead, I supply a
property that serializes/deserializes the data as needed.

Another reason to use property() is when you remove an attribute that
is part of your public API, you can provide a property with the same
name as the attribute. Eg:

class MyModel(models.Model):
  @property
  def SEPARATOR(self):
    if self.foo:
      return '::'
    return '||'

The behaviour is now dynamic, but any old code using
instance.SEPARATOR will get still work, and use the new dynamic
definition.

Cheers

Tom

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to