getting the class name of a subclass

George Sakkis gsakkis at rutgers.edu
Wed Jul 20 17:10:33 CEST 2005


"flupke" <flupke at nonexistingdomain.com> wrote:

> I have the following test code setup, trying to get the class name of a
> subclass in the super class. (Reason why i want this is described below)
>
> file class_name_start.py
> ========================
> import class_name as cn
>
> obj = cn.B()
> obj.printclass()
> ========================
>
>
> file class_name.py
> ========================
> class A(object):
>      def __init__(self):
>          print "I'm A"
>
>      def printclass(self):
>          print "Name ",__name__
>          print "Class ",A.__name__
>
> class B(A):
>      def __init__(self):
>          super(B,self).__init__()
>          print "I'm B"
> ========================
>
> Output:
> I'm A
> I'm B
> Name  class_name
> Class A
>
> I would want the last line to be Class B
> The reason i want this is since i have a number of dialogs all deriving
> from the same super class. In the superclass i have a save function and
> i thought it would be easy to get the classname and write the properties
> in a filename with the classes name as the filename.
> However it turns out i get the class name of the superclass for all.
> All the different dialogs are in seperate files.
>
> Is there a way to get the name of the subclass. If not i could always
> pass a param to the init function but in my real life code i already
> have several params shipped to the init so i wanted to solve it slightly
> more elegant.
>
> Regards,
> Benedict


Make printclass a class method:

class A(object):
    def __init__(self):
        print "I'm A"

    # for python 2.4
    @classmethod
    def printclass(cls):
        print "Module", cls.__module__
        print "Class", cls.__name__
    # for 2.3 or older
    printclass = classmethod(printclass)


Regards,
George





More information about the Python-list mailing list