The calendar code - this one is hard to get right with array checks, a one-liner can even take care of leap years but prepare to go crazy on the math - seems right. The minor oversight is in the birthday sanity checks:
Python:
def birthDchoiceUp(self):
if self.birthdayM == "January" or self.birthdayM == "March" or self.birthdayM == "May" or self.birthdayM == "July" or self.birthdayM == "September" or self.birthdayM == "November":
if self.birthdayD < 31:
self.birthdayD += 1
elif self.birthdayM == "April" or self.birthdayM == "June" or self.birthdayM == "August" or self.birthdayM == "October" or self.birthdayM == "December":
if self.birthdayD < 30:
self.birthdayD += 1
elif self.birthdayM == "February":
if self.birthdayD < 28:
self.birthdayD += 1
August, October and December are in the first elif intended for 30 days, while September and November are in the main if branch for 31 days. (Leading to August 31, October 31 and December 31 being impossible, but September 31 and November 31 being possible. There is no February 29 either but that one's likely intended to avoid the extra checks. Just have to swap the checks there unless I forgot something.)
Hope this helps!