Look at your code:
def calcAge(dob):
today = date.today()
dob = today.year - dob.year - ((today.month, today.day) < (dob.month, dob.day))
return dob
...
p1.calcAge()
You define the method as taking a single value as a parameter and returning the age. (Sort of)
Then you call it without giving it the parameter at all! Understandably, it complains ...
Additionally, when you call it, you don't do anything with the answer you return.