Python 比较课堂上的日期

Python 比较课堂上的日期,python,datetime,oop,Python,Datetime,Oop,因此,我仍在学习OOP,并试图找出如何在练习中使用datetime 所以我有两门课: 交货-它获取交货编号、数量和到期日期 杂货店-它获取一个交货清单,按日期从最新到最旧排序 它也有两种方法,但我被第二种方法卡住了,所以我只发布两种 添加配送-只需获取新配送并将其添加到列表中即可 删除旧产品-它检查是否有交付过期(使用今天的日期)。如果是这样,它会将其从交付列表中删除 这是我的目标: 从datetime导入datetime、timedelta、date 导入时间 类传递(对象): 定义初始日期(

因此,我仍在学习OOP,并试图找出如何在练习中使用
datetime

所以我有两门课:

交货
-它获取交货编号、数量和到期日期

杂货店
-它获取一个交货清单,按日期从最新到最旧排序

它也有两种方法,但我被第二种方法卡住了,所以我只发布两种

添加配送
-只需获取新配送并将其添加到列表中即可

删除旧产品
-它检查是否有交付过期(使用今天的日期)。如果是这样,它会将其从交付列表中删除

这是我的目标:

从datetime导入datetime、timedelta、date
导入时间
类传递(对象):
定义初始日期(self、orderNum、quantity、expDate):
self.orderNum=orderNum
self.quantity=数量
self.expDate=expDate
定义(自我):
返回“订单号:{}数量:{}到期日期:{}”。格式(str(self.orderNum)、str(self.Quantity)、self.expDate)
类(对象):
定义初始化(自):
self.deliveryList=[]
定义(自我):
返回“deliveryList:{}”。格式(str(self.deliveryList))
def添加交付(自我、新交付):
self.deliveryList.append(newDelivery)
返回
def删除旧产品(self、orderNum):
今天=日期.今天().strftime(“%d/%m/%Y”)
expDate=datetime.strftime(“%d/%m/%Y”)
打印(“今天的日期是:”,今天)
如果expDate>今天:
self.deliveryList.pop(orderNum)
打印(“删除的旧项目”)
返回
测试交付=交付(123,4,“2019年8月29日”)
testGros=杂货店()
testGros.添加交付(testDelivery)
testGros.remove_old_产品(testDelivery.orderNum)
我收到
TypeError:描述符'strftime'需要一个'datetime.date'对象,但收到了一个'str'
,我不确定如何修复它


任何帮助都会很好:)

有问题的一行是:

expDate = datetime.strftime("%d/%m/%Y")
datetime
不是datetime对象/实例。它指的是模块本身。
datetime
模块有一个
strftime
方法,给定的
datetime
实例也有一个
strftime
方法,但它们有不同的签名。由于您使用的是模块
strftime
,因此需要传递datetime对象和格式字符串:

expDate = datetime.strftime(dt, "%d/%m/%Y")

您的
删除旧产品
缺少一系列逻辑。您传递了订单编号,但希望获得该订单的交货并比较交货日期,但您没有任何代码来实际查找交货并获取其到期日期

您应该通过传递整个交付对象来简化事情

def remove_old_products(self, delivery):
        today = date.today().strftime("%d/%m/%Y")
        expDate = delivery.expDate.strftime("%d/%m/%Y")
但这也不太管用;您正在比较d/m/y格式的字符串,但这意味着2019年2月2日之前是2019年2月1日,这是不对的。你应该直接比较日期

def remove_old_products(self, delivery):
        today = date.today()
        expDate = delivery.expDate
        print("Today's date is:", today.strftime("%d/%m/%Y")
现在,使用传递调用该方法:

testGros.remove_old_products(testDelivery)

不,这不对。只有一个strftime方法,它位于datetime类上。您的解决方案之所以有效,是因为在Python中,您可以通过将实例作为第一个参数传入类来调用任何实例方法。但这并不意味着这样做是正确的。