Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 超市数据类_Python_Python Dataclasses - Fatal编程技术网

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))