Python-一个从出生日期开始计算员工年龄的类


import datetime
class Employee:
def __init__ (self,first,last,pay,dob):
self.first = first
self.last = last
self.pay = pay
self.email = first + "." + last + "@company.com"
self.dob = dob

def fullname(self):
return '{} {}'.format(self.first,self.last)

def age(dob):
today = date.today()
return today.year - dob.year - ((today.month, today.day) < (dob.month, dob.day))


emp1 = Employee("aa","ss",122,date(1991,2,3))
emp2 = Employee("ww","ii",637,date(1997,8,24))
emp3 = Employee("ee","oo",986,date(1986,10,19))
#driver code
print(Employee.age(emp2))

我得到以下错误:

属性错误:"Employee"对象没有属性"year"

这里面有什么不正确的地方?

Employee.age()方法签名只有一个参数-dob。当您调用它时,传递的第一个参数就是实例。按照惯例,我们使用参数self。但您使用dob。像在其他方法中一样,坚持惯例。然后使用self.dob.year

from datetime import date
class Employee:
def __init__ (self,first,last,pay,dob):
self.first = first
self.last = last
self.pay = pay
self.email = first + "." + last + "@company.com"
self.dob = dob

@property
def fullname(self):
return '{} {}'.format(self.first, self.last) # in 3.6 return f'{self.first} {self.last}'

def age(self):
today = date.today()
return today.year - self.dob.year - ((today.month, today.day) < (self.dob.month, self.dob.day))


emp1 = Employee("aa","ss",122,date(1991,2,3))
emp2 = Employee("ww","ii",637,date(1997,8,24))
emp3 = Employee("ee","oo",986,date(1986,10,19))
#driver code
print(emp1.age())

注意,我还添加了@property decorator,所以全名是"只读";所有物还修复了导入

在3.6+中,您可以使用f字符串。agee-mail property,如fullname,可能是只读属性(即不应指定与dob相矛盾的年龄(,例如

@property
def age(self):
today = date.today()
return today.year - self.dob.year - ((today.month, today.day) < (self.dob.month, self.dob.day))

然后你可以像这个一样使用它

print(emp1.age) # note the difference when it is method in the original class, and now when its property

您的employee类没有年份属性

但是

employee.dob

import datetime
from datetime import date
class Employee:
def __init__ (self,first,last,pay,dob):
self.first = first
self.last = last
self.pay = pay
self.email = first + "." + last + "@company.com"
self.dob = dob

def fullname(self):
return '{} {}'.format(self.first,self.last)

def age(dob):
today = date.today()
dob = dob.dob # get dob from the object(of employee class) <<<<< Single change
return today.year - dob.year - ((today.month, today.day) < (dob.month, dob.day))


emp1 = Employee("aa","ss",122,date(1991,2,3))
emp2 = Employee("ww","ii",637,date(1997,8,24))
emp3 = Employee("ee","oo",986,date(1986,10,19))
#driver code
print(Employee.age(emp2))

最新更新