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"))代码应该比较date和expiration_date中的两个属性,如果产品过期,则应该返回True。OtherStock不能过期,所以每次都返回false。如果我尝试运行它,我会得到一个AttributeError: 'str' object has no attribute 'expiration_date'。
发布于 2020-12-13 03:23:42
您的代码将字符串传递给is_expired,而不是对象。"bread"是一个字符串。
也许你想要print(is_expired(FoodStock(), "2021-02-16"))
发布于 2020-12-13 03:30:57
就像你说的,问题出在inventory.expiration_date上,就像错误所说的,inventory是一个str。并且您传递的第一个参数(“面包”和“金”)实际上是字符串。
你需要首先创建你的股票对象。Python不会为您做到这一点。但是,according to documentation会自动为我们创建初始化器。这是您在下面看到的FoodStock(...)和OtherStock(...)调用。
today = "2021-02-16"
print(is_expired(FoodStock(name="bread", expiration_date="2021-02-12"), today))
print(is_expired(OtherStock(name="gold"), today))在这里,我们使用关键字参数来指定各个字段。
您可能还想考虑检查date >= inventory.expiration_date而不是==。
https://stackoverflow.com/questions/65268796
复制相似问题