[Tutor] super() with Multiple Inheritance

James Thornton james at jamesthornton.com
Thu Apr 14 17:11:26 CEST 2011


Why does user.params() not return all the params up the inheritance
chain? -- It's not including the params defined in Person() -- notice
Vertex() does not have a params() method.

class Element(object):
    def __init__(self,element_type):
         self.oid = None
         self.uuid = uuid.uuid4()
         self.key = None
         self.element_type = element_type

    def params(self):
        return dict(uuid=self.uuid, key=self.key)

class Vertex(Element):
    def __init__(self):
        super(Vertex,self).__init__("vertex")

class Person(Vertex):

    def __init__(self,name=None,uri=None,email=None):
        self.s = super(Person,self)
        self.s.__init__()
        self.name=name
        self.uri=uri
        self.email = email

    def params(self):
        params = dict(name=self.name,uri=self.uri,email=self.email)
        params.update(self.s.params())
        return params

class User(Person):

    def __init__(self,
                 name=None,
                 uri=None,
                 email=None,
                 first_name=None,
                 last_name=None,
                 facebook_id=None,
                 facebook_link=None,
                 facebook_username=None,
                 gender=None,
                 locale=None):
        self.s = super(User,self)
        self.s.__init__(name,uri,email)

        self.first_name = first_name
        self.last_name = last_name
        self.facebook_id = facebook_id
        self.facebook_link = facebook_link
        self.facebook_username = facebook_username
        self.gender = gender
        self.locale = locale

    def params(self):
        params = dict(first_name=self.first_name,
                      last_name=self.last_name,
                      facebook_id=self.facebook_id,
                      facebook_link=self.facebook_link,
                      facebook_username=self.facebook_username,
                      gender=self.gender,
                      locale=self.locale)
        print self.s.params()
        params.update(self.s.params())
        return params


More information about the Tutor mailing list