class attributes & data attributes

Diez B. Roggisch deets at nospam.web.de
Wed Jun 20 17:02:48 CEST 2007


james_027 wrote:

> hi everyone,
> 
> I am now in chapter 5 of Dive Into Python and I have some question
> about it. From what I understand in the book is you define class
> attributes & data attributes like this in python
> 
> class Book:
> 
>     total # is a class attribute
> 
>     def __init__(self):
>         self.title  # is a data attributes
>         self.author # another data attributes
> 
> To define class attributes is like defining a function in class, to
> define a data attributes is defining a variable inside the __init__
> method.
> 
> what makes me confuse is this model from Django
> 
> from django.db import models
> 
> class Person(models.Model):
>     first_name = models.CharField(maxlength=30)
>     last_name = models.CharField(maxlength=30)
> 
> I believe the first_name and last_name are data attributes? but why it
> is they look like a class attributes as being define.

First of all, the common term for what you call a data attribute is
is "instance attribute".

Furthermore - you're right and wrong.

The django-code above defines a model class, which has some class-attributes
declaring the fields the database shall have. and the instances as well!

So while the above clearly are class attributes, the ORM runtime of django
will create instances of that class that have instance attributes of the
same name.

Something along these lines (albeit a contrived example):

class Foo(object):
   bar = "baz"

   def __init__(self):
       for name, value in self.__class__.__dict__.items():
           if isinstance(value, str):
              setattr(self, name, "some other value")

f = Foo()
print f.bar

Which should result in "some other value". But it's untested code above.

Diez



More information about the Python-list mailing list