class attributes & data attributes

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • james_027

    #1

    class attributes & data attributes

    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.M odel):
    first_name = models.CharFiel d(maxlength=30)
    last_name = models.CharFiel d(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.

    Thanks in advance for explaining

    james

  • Diez B. Roggisch

    #2
    Re: class attributes & data attributes

    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.M odel):
    first_name = models.CharFiel d(maxlength=30)
    last_name = models.CharFiel d(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(valu e, 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

    Comment

    • Bruno Desthuilliers

      #3
      Re: class attributes & data attributes

      james_027 a écrit :
      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
      s/data/instance/
      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.M odel):
      first_name = models.CharFiel d(maxlength=30)
      last_name = models.CharFiel d(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_name and last_name are actually class attributes. AFAICT, they are
      descriptors[1] controlling access to the resultset returned by the db query.

      [1] cf the doc for the descriptor protocol on python.org. This is the
      feature that - amongst other things - allow Python to have a support for
      'computed attributes' (aka properties).



      HTH

      Comment

      Working...