#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 3 "../CompositePKGenTest.ump"

class Person():
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Person Attributes
    #Helper Variables
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aName, aId, aAge):
        self._canSetName = None
        self._canSetId = None
        self._cachedHashCode = None
        self._age = None
        self._id = None
        self._name = None
        self._cachedHashCode = -1
        self._canSetId = True
        self._canSetName = True
        self._name = aName
        self._id = aId
        self._age = aAge

    #------------------------
    # INTERFACE
    #------------------------
    def setName(self, aName):
        wasSet = False
        if not self._canSetName :
            return False
        self._name = aName
        wasSet = True
        return wasSet

    def setId(self, aId):
        wasSet = False
        if not self._canSetId :
            return False
        self._id = aId
        wasSet = True
        return wasSet

    def setAge(self, aAge):
        wasSet = False
        self._age = aAge
        wasSet = True
        return wasSet

    def getName(self):
        return self._name

    def getId(self):
        return self._id

    def getAge(self):
        return self._age

    def equals(self, obj):
        if obj is None :
            return False
        if not type(self) is type(obj) :
            return False
        compareTo = obj
        if self.getId() is None and not (compareTo.getId() is None) :
            return False
        elif not (self.getId() is None) and not self.getId() == compareTo.getId() :
            return False
        if self.getName() is None and not (compareTo.getName() is None) :
            return False
        elif not (self.getName() is None) and not self.getName() == compareTo.getName() :
            return False
        return True

    def __hash__(self):
        if self._cachedHashCode != -1 :
            return self._cachedHashCode
        self._cachedHashCode = 17
        if not (self.getId() is None) :
            self._cachedHashCode = self._cachedHashCode * 23 + self.getId().__hash__()
        else :
            self._cachedHashCode = self._cachedHashCode * 23
        if not (self.getName() is None) :
            self._cachedHashCode = self._cachedHashCode * 23 + self.getName().__hash__()
        else :
            self._cachedHashCode = self._cachedHashCode * 23
        self._canSetId = False
        self._canSetName = False
        return self._cachedHashCode

    def delete(self):
        pass

    def __str__(self):
        return str(super().__str__()) + "[" + "id" + ":" + str(self.getId()) + "," + "name" + ":" + str(self.getName()) + "," + "age" + ":" + str(self.getAge()) + "]"


#PLEASE DO NOT EDIT THIS CODE
#This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!
# line 10 "../CompositePKGenTest.ump"
from Person import Person

class Mentor(Person):
    #------------------------
    # MEMBER VARIABLES
    #------------------------
    #Mentor Attributes
    #------------------------
    # CONSTRUCTOR
    #------------------------
    def __init__(self, aName, aId, aAge, aClass):
        self._class = None
        super().__init__(aName, aId, aAge)
        self._class = aClass

    #------------------------
    # INTERFACE
    #------------------------
    def setClass(self, aClass):
        wasSet = False
        self._class = aClass
        wasSet = True
        return wasSet

    def getClass(self):
        return self._class

    def delete(self):
        super().delete()

    def __str__(self):
        return str(super().__str__()) + "[" + "class" + ":" + str(self.getClass()) + "]"