首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超级市场数据类

超级市场数据类
EN

Stack Overflow用户
提问于 2020-12-13 03:08:40
回答 2查看 55关注 0票数 1
代码语言:javascript
复制
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"))

代码应该比较dateexpiration_date中的两个属性,如果产品过期,则应该返回TrueOtherStock不能过期,所以每次都返回false。如果我尝试运行它,我会得到一个AttributeError: 'str' object has no attribute 'expiration_date'

EN

回答 2

Stack Overflow用户

发布于 2020-12-13 03:23:42

您的代码将字符串传递给is_expired,而不是对象。"bread"是一个字符串。

也许你想要print(is_expired(FoodStock(), "2021-02-16"))

票数 1
EN

Stack Overflow用户

发布于 2020-12-13 03:30:57

就像你说的,问题出在inventory.expiration_date上,就像错误所说的,inventory是一个str。并且您传递的第一个参数(“面包”和“金”)实际上是字符串。

你需要首先创建你的股票对象。Python不会为您做到这一点。但是,according to documentation会自动为我们创建初始化器。这是您在下面看到的FoodStock(...)OtherStock(...)调用。

代码语言:javascript
复制
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而不是==

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65268796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档