[Tutor] garbage collection/class question

Dave Angel d at davea.name
Fri Jan 11 22:32:01 CET 2013


On 01/11/2013 02:41 PM, Jan Riechers wrote:
> On 10.01.2013 19:50, Mitya Sirenef wrote:
>> On 01/10/2013 09:06 AM, richard kappler wrote:
>>
>> class Tree(object):
>>      height = 0
>>
>>      def grow(self):
>>          self.height += 1
>>
>> You may have a dozen of related functions and you can logically group
>> them together by making them methods of a class, making it easier to
>> think about and work on the logic of your program.
>>
>>
>>
>
> Actually one question about those "dozens of related" instances
> generated by:
> greenwoodTree = Tree()
> oakTree = Tree()
> ....
>
> Both, greenwoodTree and oakTree, are derived from Tree class, 

It's important that we use correct, or at least close terminology.  A
derived class is VERY different from an instance.  greenWoodTree and
oakTree are bound to different instances of Tree.

> thus receiving the features and also - if so - holding unique values
> created in there __init__ generator method

__init__ is not a generator.  it's simply a method.  A method is a
function that's defined inside a class

> - "self.height", "self.color" and so forth uniquely each.

We have to be careful here.  Such data can be attributes of an instance,
or they can be attributes of a class.  Strangely enough, this example
has a self.height and tree.height that are both called height, but
technically distinct values.  I think it's best if you avoid such
things, and use unique names till you've got the fundamentals straight.

>
> But do both share the same function memory space from the class "Tree"?
>

I wouldn't use the term function memory space, but I'll say this much. 
Unless you do something tricky, there is only one method Tree.grow, and
all instances share that same method.  No duplicated memory at all.

> I am currently trying also to get my head wrapped around OOP in
> general, but not 100% sure so that derived instances use the same
> functions (also memory wise speaking) - or are there several
> definitions of "grow" ?

Not yet.  Creating instances don't duplicate any methods.  You'd have to
do something explicit, and advanced.

>
> The confusion came somehow when reading about "classmethods" and
> "staticmethods" and patterns like Singleton, monostate, borg...
> from which I understand only ensure that the "self.height" properties
> are shared across multiple instances of a given class?
>

I'd consider all of those as advanced techniques, and a complete
confusion at your present stage. classmethods and staticmethods affect
the parameters that a method gets, not whether data properties belong to
the class or to the method.

> From what I tried out using id() and generating functions in a loop -
> the "id(class.function) provided the same result when printed out,
> according to that:
> http://stackoverflow.com/questions/121396/accessing-object-memory-address
>
> So I assume the functions are shared across thus one decleration has
> been made in "Tree" class and all siblings are using that one?
>

Without showing the code in this loop, I can't comment on what you
observed.  Don't have any idea what you mean by a sibling.  The only
meaning I can think of is that two classes each derived from a common
base class can be considered siblings.  But you don't do any deriving in
this email.


-- 

DaveA



More information about the Tutor mailing list