a "generic" problem

Manuel Garcia news at manuelmgarcia.com
Wed Feb 12 18:34:54 EST 2003


Please forgive, I didn't have time to read all the details in your
post, but I remember having a similar problem, so maybe this will
help...

(also I like to run code before I post, and in this case I haven't)
:-/

On Wed, 12 Feb 2003 15:46:06 -0500, "Sean Ross"
<frobozz_electric at hotmail.com> wrote:
(edit)
>        #
>        # create new instances c1, c2 of whichever class p1, p2 belong to
>        #

If you can get away with just copying p1 & p1, then:

    import copy

    c1 = copy.copy(p1)
    c2 = copy.copy(p2)

Otherwise...

Every instance has the attribute __class__.  Call this to run the
class's constructor:

    c1 = p1.__class__()
    c2 = p2.__class__()

>ISSUE 2:
>"How do I implement this method, so that I do not need to
>override it for each sublass?"

instead of using 'staticmethod', use 'classmethod'

'staticmethod' works like this:

    class fake1():
        def meth1(x,y,z):
            print 'static %r' % (x+y+z,)
            return 17
        meth1 = staticmethod(meth1)

'classmethod' works like this:

    class fake2():
        def meth2(cls, x,y,z):
            print '%s %r' % (cls.__name__, x+y+z)
            return cls(x+y+z)
        meth2 = classmethod(meth2)

My example doesn't make sense, but I hope you see the syntax
structure.  Via the variable 'cls', you have access to the class
involved with method f.  Both of these work, for staticmethod and
classmethod:

    fake.meth(x,y,z)

    a = fake()
    a.meth(x,y,z)

What I am trying to say is that you don't even have to have an
instance to use a staticmethod or a classmethod, you can just run the
method from the class directly.

>ISSUE 3:
>   "Is there a way to overide the value of a class variable of the super
>class
>    inside the inheriting class?"

Is this what you mean?

    class fake3():
        attr1 = 17
        attr2 = 19

    class subfake1(fake3): pass

    class subfake2(fake3):
        attr2 = 23

No special steps to override!  I may be misunderstanding you.

Hope this helps!

Manuel




More information about the Python-list mailing list