我不明白为什么我的getter和setter在代码的前两个类中工作,而在第三个类中却不工作
我看了类似的问题,但能找到一个对我有帮助的,对不起,如果有什么我错过了。我对Python还是有点陌生,所以我意识到它可能是我刚刚错过或还没有意识到的东西
我的代码:
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)
目前没有回答
相关问题 更多 >
编程相关推荐