Info needed on metaclasses / type-ing

Dimitris Garanatsios rs96057 at hotmail.com
Sat Mar 23 08:46:58 EST 2002


I recently browsed through an unfinished book of Bruce Eckel, "Thinking in
Python", Revision 0.1.2
I can't remember the URL where i got it, but i found it through searching
for documentation on Python from the main site, www.python.org

I found the following peace of code there:

------------------------------------------------------------------

#: c01:SingletonMetaClass.py
class SingletonMetaClass(type):
    def __init__(cls, name, bases, dict):
        super(SingletonMetaClass, cls).__init__(name, bases, dict)
        original_new = cls.__new__

        def my_new(cls, *args, **kwds):
            if cls.instance == None:
                cls.instance = original_new(cls, *args, **kwds)
            return cls.instance

        cls.instance = None
        cls.__new__ = staticmethod(my_new)

class bar(object):
    __metaclass__ = SingletonMetaClass

    def __init__(self,val):
        self.val = val

    def __str__(self):
        return `self` + self.val

...
#:~

------------------------------------------------------------------

My question is about the "SingletonMetaClass" class.
I have tried in the past to create my own types using Python and just could
not find a way of doing that since built-in type objects' structure where
not documented.

The "SingletonMetaClass though", as far as i can understand, please help me
with that, is doing exactly what i wanted: a new type definition. I browsed
Python's manuals to find more about the attributes and functions that are
used, but found nothing...

Could anyone help me find information about the meaning and use of the
following attributes/functions/objects? These are:

--- the "__metaclass__" attribute of the "bar" class (derived from object)

--- the "object" object itself

--- the "super" function used in the "SingletonMetaClass" class (a class for
a new type object?)

--- the "__new__" attribute/method of a class (applies to any class?)

--- the "staticmethod" function used in the "SingletonMetaClass" class

--- any additional info about related classes or functions that are not used
in the above example but exist and are available to use

Thanx, Dimitris






More information about the Python-list mailing list