TransWikia.com

Why is getter and setter not working for one class in my code, but works for the other ones

Stack Overflow Asked by Katie Schmidt on January 3, 2021

I’m not understanding why my getters and setters work in the first two classes of my code, but doesn’t on the third class.

I looked at similar questions but could find one that helped me, sorry if there is something and I missed it. I’m still somewhat new to Python so I realize it’s likely something I’m just missing or not aware of yet.

My code:

class Person():
    intTotalPeople = int(0)

    def __init__(self, firstName, lastName, gender, age):
        'Obtain name, gender, gender, and age'
        self.firstName = firstName
        self.lastName = lastName
        self.gender = gender
        self.age = age

    @property
    def firstName(self):
        return self.__firstName

    @property
    def lastName(self):
        return self.__lastName

    @property
    def gender(self):
        return self.__gender

    @property
    def age(self):
        return self.__age

    @firstName.setter
    def firstName(self, firstName):
        if firstName != str(firstName):
            raise Exception('firstName should contain letters only. The value entered was: {}'.format(firstName))
        else:
            self.__firstName = firstName

    @lastName.setter
    def lastName(self, lastName):
        if lastName != str(lastName):
            raise Exception('lastName should contain letters only. The value entered was: {}'.format(lastName))
        else:
            self.__lastName = lastName

    @age.setter
    def age(self, age):
        if age == int(age):
            self.__age = age
        elif age == float(age):
            self.__age = age
        else:
            raise Exception('age should contain numbers only. The value entered was: {}'.format(age))

    @gender.setter
    def gender(self, gender):
        if gender == "Female":
            self.__gender = gender
        elif gender == "Male":
            self.__gender = gender
        else:
            raise Exception('gender must be either Male or Female only. The value entered was: {}'.format(gender))


class Student(Person):
    'Class for data pertaining to current students'

    intTotalFemale = int(0)
    intTotalMale = int(0)
    dblTotalGPA = float(0)
    dblAverageGPA = float(0)
    intTotalFemaleAge = int(0)
    intTotalMaleAge = int(0)
    dblAverageFemaleAge = float(0)
    dblAverageMaleAge = float(0)

    def __init__(self, firstName, lastName, gender, age, GPA):
        Person.__init__(self, firstName, lastName, gender, age)
        self.GPA = GPA

        Person.intTotalPeople += 1
        Student.dblTotalGPA += self.GPA

        if self.gender == "Female":
            Student.intTotalFemale += 1
            Student.intTotalFemaleAge += self.age
        else:
            Student.intTotalMale += 1
            Student.intTotalMaleAge += self.age

    @property
    def GPA(self):
        return self.__GPA

    @GPA.setter
    def GPA(self, GPA):
        if GPA < 0:
            raise Exception('GPA must be zero or greater. The value you entered was: {}'.format(GPA))
        elif GPA > 4.0:
            raise Exception('GPA must be 4.0 or less. The value you entered was: {}'.format(GPA))
        else:
            self.__GPA = GPA

    def CalcAverageGPA(self):
        Student.dblAverageGPA = Student.dblTotalGPA / Person.intTotalPeople

    def CalcAverageAgeByGender(self):
        if self.gender == "Female":
            Student.dblAverageFemaleAge = Student.intTotalFemaleAge / Student.intTotalFemale
        else:
            Student.dblAverageMaleAge = Student.intTotalMaleAge / Student.intTotalMale

    def __str__(self):
        return "nAverage GPA: " + str(Student.dblAverageGPA) + "nAverage Age of Male Grads: " + str(
            Student.dblAverageMaleAge) + "nAverage Age of Female Grads: " + str(Student.dblAverageFemaleAge)


class Graduate(Student):
    intFemaleJobs = int(0)
    intMaleJobs = int(0)
    intTotalGrads = int(0)

    def __init__(self, firstName, lastName, gender, age, GPA, gradYear, jobStatus):
        Student.__init__(self, firstName, lastName, gender, age, GPA)
        self.gradYear = gradYear
        self.jobStatus = jobStatus
        Graduate.intTotalGrads += 1

        if self.gender == "Female":
            if self.jobStatus == "Y":
                Graduate.intFemaleJobs += 1
        else:
            if self.jobStatus == "Y":
                Graduate.intMaleJobs += 1

    @property
    def GradYear(self):
        return self.__gradYear

    @property
    def JobStatus(self):
        return self.__jobStatus

    @GradYear.setter
    def GradYear(self, gradYear):
        if gradYear == int(gradYear):
            self.__gradYear = gradYear
        else:
            raise Exception('gradYear must be in YYYY format. The value you entered was: {}'.format(gradYear))

    @JobStatus.setter
    def JobStatus(self, jobStatus):
        if jobStatus != "Y":
            raise Exception('jobStatus must be Y or N. The value you entered was: {}'.format(jobStatus))
        elif jobStatus != "N":
            raise Exception('jobStatus must be Y or N. The value you entered was: {}'.format(jobStatus))
        else:
            self.__jobStatus = jobStatus

    def __str__(self):
        return "Total Graduate Students: " + str(self.intTotalGrads) + Student.__str__(
            self) + "nTotal Male Graduates with Jobs: " + str(
            Graduate.intMaleJobs) + "nTotal Female Graduates with Jobs: " + str(Graduate.intFemaleJobs)
# import StudentClass file to access Student class
import StudentClass

# ---------------------------------------------------
# MAIN - Call Graduate class and include first name, 
#        last name, gender, GPA, age, grad year,
#        and job status in argument 
#        and display totals and averages
# ---------------------------------------------------

objStudent1 = StudentClass.Graduate("Katie", "Schmidt", "Female", 29, 4.00, 2009, "Y")
objStudent2 = StudentClass.Graduate("Tammy", "Schmidt", "Female", 60, 3.75, 1978, "Y")
objStudent3 = StudentClass.Graduate("Fred", "Schmidt", "Male", 60, 3.25, 1978, "N")
objStudent4 = StudentClass.Graduate("Emma", "Schmidt", "Female", 35, 2.00, 2002, 2)
objStudent5 = StudentClass.Graduate("Richard", "Evans", "Male", 55, 2.10, 1985, "Y")

StudentClass.Student.CalcAverageGPA(objStudent5)
StudentClass.Student.CalcAverageAgeByGender(objStudent1)
StudentClass.Student.CalcAverageAgeByGender(objStudent5)

print(objStudent5)

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP