Python 超市数据类
代码应比较Python 超市数据类,python,python-dataclasses,Python,Python Dataclasses,代码应比较date和expiration\u date中的两个属性,如果产品过期,则应返回TrueOtherStock无法过期,因此每次都返回false。如果我尝试运行它,我会得到一个属性错误:“str”对象没有属性“expiration\u date”您的代码将字符串传递给是过期的,而不是对象“面包”是一个字符串 也许你想要打印(是否过期(FoodStock(),“2021-02-16”)?正如你所说,问题在于库存。过期日期,正如错误所说,库存是str。你传递的第一个参数(“面包”和“黄金”)
date
和expiration\u date
中的两个属性,如果产品过期,则应返回True
OtherStock
无法过期,因此每次都返回false
。如果我尝试运行它,我会得到一个属性错误:“str”对象没有属性“expiration\u date”
您的代码将字符串传递给是过期的,而不是对象<代码>“面包”
是一个字符串
也许你想要打印(是否过期(FoodStock(),“2021-02-16”)?正如你所说,问题在于
库存。过期日期
,正如错误所说,库存
是str
。你传递的第一个参数(“面包”和“黄金”)实际上是字符串
您需要首先创建库存对象。Python不会为你做这件事。然而,Python会自动为我们创建初始化器。这就是您在下面看到的FoodStock(…)
和OtherStock(…)
调用
from dataclasses import dataclass
from typing import Union
@dataclass
class OtherStock:
name:str = "gold"
units:int = 7
price_per_unit : float = 150000
@dataclass
class FoodStock:
name:str = "bread"
units:int = 2
price_per_unit: float = 700
expiration_date: str = "2021-02-16"
stock = Union[OtherStock,FoodStock]
def is_expired(inventory:stock,date:str)->bool:
if type(inventory) == OtherStock:
return False
if date == inventory.expiration_date:
return True
else:
return False
print(is_expired("bread","2021-02-16"))
print(is_expired("gold","2021-02-16"))
这里,我们使用关键字参数来指定各个字段
您还可以考虑检查<代码>日期> =清单.ExuthOrthDe><代码>,而不是<代码>= .< /P> <代码>类型< /Cord>返回一个字符串。您想改为使用
isinstance
。可以,但错误在于if date==inventory.expiration\u date声明已过期()
的第一个参数库存:库存
不会导致传递的任何东西转换为这些类型中的一种-实际上,您必须传递其中一种类型的实例。当您有两批过期日期不同的面包时,您会怎么做?
today = "2021-02-16"
print(is_expired(FoodStock(name="bread", expiration_date="2021-02-12"), today))
print(is_expired(OtherStock(name="gold"), today))