newbee: object's attributes

Alexander Eisenhuth stacom at stacom-software.de
Tue Aug 13 09:13:31 CEST 2002


Thanks a lot, now i got it:

class CTest:
      ''' evaluate OOP attributes
      '''
      def __init__ (self):
          # if _l2 is not init here, we have it as "class attribute"
          self._l2 = ['obj specific']
          pass

      def objAccess(self):
          # access the obj specific attribute
          self._l2.append(1)
          print 'objAccess:%s' % self._l2

      def classAccess(self):
          print 'classAccess: %s' % CTest._l2

      _l2 = ['class specific']

obj = CTest()
obj.objAccess()
obj.classAccess()

Duncan Booth wrote:
 > Alexander Eisenhuth <stacom at stacom-software.de> wrote in
 > news:3D57D4F8.7090003 at stacom-software.de:
 >
 >
 >>class CTest:
 >>       ''' filter different link typs, identified by starting sequence
 >>       '''
 >>       def __init__ (self):
 >>           pass
 >>
 >>       def access(self):
 >>           self._l2.append(1)
 >>
 >>       _l2 = []
 >>
 >>obj = CTest()
 >>obj.access()
 >>obj.access()
 >>
 >>newObj = CTest()
 >>obj.access()
 >>
 >>
 >>must I set self._l2 in the constructor to [] that i can speak of a
 >>object specific attribute ? Is in other words _l2 a attribute of the
 >>namespace CTest ?
 >
 >
 > _l2 in your code is an attribute of the class.
 >
 > When the class statement is executed, all of the statements in the class
 > body are executed in a new namespace (much like a function call). All of
 > the local variables created while executing the class body are then used to
 > create the class attributes. In your example, the 'local' variables in the
 > class body are __init__, access and _l2, so these are stored in the class.
 >
 > Instance attributes are created when they are assigned through an instance
 > such as self. Typically you would do this first in the __init__ method, but
 > you may also create instance attributes at any other time.
 >
 > When you access a method or attribute through an instance, the instance
 > attributes are searched first, then the attributes for the class, then the
 > attributes for each base class in turn.
 >
 > New style classes (i.e. subclasses of object) search the base classes in a
 > slightly different order from old style classes and may also restrict your
 > ability to create new instance attributes.
 >





More information about the Python-list mailing list