本守则的目的是:
< code >H19该代码将将所有这些数据存储在字典< code >H 210G 211
以下是代码:
from datetime import datetime
from dateutil.relativedelta import relativedelta
class Test:
def __init__(self):
self.today = datetime.today()
def name(self):
first_name, middle_name, last_name = input("enter your name:\n".title()).split(' ')
return first_name, middle_name, last_name
def age(self):
date_of_birth = input("enter your date of birth:\n")
date_of_birth = datetime.strptime(date_of_birth, "%d/%m/%Y")
age = relativedelta(self.today, date_of_birth)
return age
def data(self):
data = {"first name": self.name()[0],
"middle_name": self.name()[1],
"last name": self.name()[2],
"age years": self.age().years,
"age months": self.age().months,
"age days": self.age().days}
print(data)
Test().data()代码不会出错。
但是关于姓名和年龄的问题对每个人都重复了三次。像这样的东西
输入你的出生日期:
1986年9月26日
输入你的出生日期:
1986年9月26日
输入你的出生日期:
1986年9月26日
发布于 2020-09-09 17:07:41
你给age()打了三次电话。您可以调用它一次,然后访问它的成员:
def data(self):
name = self.name()
age = self.age()
data = {"first name": name[0],
"middle_name": name[1],
"last name": name[2],
"age years": age.years,
"age months": age.months,
"age days": age.days}
print(data)发布于 2020-09-09 17:14:44
我建议您使用实例并调用init方法本身中的名称输入,如下所示:
class Test:
def __init__(self):
self.today = datetime.today()
self.full_name = input("enter your full name:\n".title()).split(' ')
self.dob = input("enter your date of birth:\n")
@property
def name(self):
first_name, middle_name, last_name = self.full_name
return first_name, middle_name, last_name
@property
def age(self):
date_of_birth = self.dob
date_of_birth = datetime.strptime(date_of_birth, "%d/%m/%Y")
age = relativedelta(self.today, date_of_birth)
return age
def data(self):
data = {"first name": self.name[0],
"middle_name": self.name[1],
"last name": self.name[2],
"age years": self.age.years,
"age months": self.age.months,
"age days": self.age.days}
print(data)因此,当您实例化类对象并在任何需要使用的时候使用数据方法时,您实际上将在__init__方法中将所需的值初始化为输入,它将将值存储到变量,直到您恢复它为止。
发布于 2020-09-09 17:11:45
您将分别调用self.age和self.name三次。您应该只调用它们一次,并将结果保存到相关变量中。
也许将这些变量设置为实例的属性以供以后使用会更好,但作为对问题的最低修正,下面是一个只执行相关调用一次的data版本。
def data(self):
first_name, middle_name, last_name = self.name()
age = self.age()
data = {"first name": first_name,
"middle_name": middle_name,
"last name": last_name,
"age years": age.years,
"age months": age.months,
"age days": age.days}
print(data)https://stackoverflow.com/questions/63816291
复制相似问题