what *is* a class?
Uwe Mayer
merkosh at hadiko.de
Mon Jun 17 10:39:00 EDT 2002
[This followup was posted to comp.lang.python and a copy was sent to the
cited author.]
In article <aejn8r$pnh$1 at nntp9.atl.mindspring.net>,
mgerrans at mindspring.com says...
> It creates and returns an instance (or object, if you prefer) of the class
> Group. g is referring to that instance, so you haven't lost it, unless you
> assign g to something else. Since you have a reference to the object you
> created (g), you don't need to "get ahold of it again" -- you still have a
> hold of (on?) it.
well, yes. and no.
if you want to create an object structure, mapping f.e. a binary file
you have to somehow 'create' the structure. for this you don't have to
read the file in. the problem was how to code this. assuming i have
classes for BYTE, WORD, DWORD, LONG, FLOAT, etc. i could pass the root
node (here: f.e. AVI()) a list of classes describing the header
information:
AVI(BYTE, DWORD, BYTE, BYTE, BYTE, ...)
If you then build compound classes they perhaps consist of a length
DWORD followed by 'length' number of bytes. it would be natural to
compose this new structure LIST of more basic types (at least for the
length DWORD, certainly not for the chain of data):
class LIST(...):
def __init__(self, f):
self.file = f
self.length = BYTE().parse(f)
...
the last line creates a byte structure and reads it from file. i *have*
to use a separate method call here, because imagine the AVI example from
above having a string of 17 characters as an argument:
AVI(BYTE, DWORD, STR(len=17), ...)
STR(len=17) already instanciates a STR object while BYTE and DWORD only
refer to classes.
In the above LIST declaration I could write:
self.length = BYTE()
self.length.parse(f)
... which looks a little humble to me.
> But if you insist on having a method to do it, you could define it like so:
>
> class Group:
> # ... other code.
> def getRef(self):
> return self
>
> Then, instead of "g2 = g", you could do this:
>
> g2 = g.getRef()
I guess when I tried that I wrote:
g2 = Group().getRef
instead of
g2 = Group().getRef()
(ouch!)
which of course returned an "unbound method object" (IIRC)
> I can't think of any reason why you would want to do this though, unless you
> just need the extra typing practice and want to confuse someone who might be
> reading the code...
lol. :)
does the above explanation make sense now or is there a more common
approach to what i'm doing?
> Perhaps I misunderstand your question and what you want is a factory. That
> would be a method that creates and returns objects. Of course, the
> constructor does this, but you might want a factory if you will instantiate
> different types of objects based on some runtime consideration. If this is
> what you are after, then reply to that effect for more elaboration.
Yes. That sounds good, too. Depending on how you can define and create
them.
I will be parsing arbitrary binary files. Up till now I'm just writing
some base classes for later use.
If you got some spare time I'd greatly appreciate it if you could either
elaborate on factories or perhaps name a link with some related
information to it.
Thanks
Ciao
Uwe
More information about the Python-list
mailing list