gpt4 book ai didi

Python 类型集合

转载 作者:行者123 更新时间:2023-11-28 18:19:30 26 4
gpt4 key购买 nike

我是 python 新手(使用 python 3.6)。

我有一些代表一些虚构硬币数量的类。

因此一个实例可以表示 10 个蓝币或负数,例如 -20 个红币等等。

我现在可以在一个列表中保存多个这样的 CoinAmount。例如

[CoinAmount(coin='blue',amount=-10), CoinAmount(coin='blue',amount=20), 
CoinAmount(coin='red',amount=5), CoinAmount(coin='red',amount=-5),
CoinAmount(coin='green',amount=5)]

我希望能够通过对每种类型的硬币求和来“压缩”上面的列表,这样我就有了。

[CoinAmount(coin='blue',amount=10), CoinAmount(coin='green',amount=5)]

[CoinAmount(coin='blue',amount=10), CoinAmount(coin='red',amount=0), CoinAmount(coin='green',amount=5)]

从中很容易推导出前者...

我的问题是:

1) 拥有某种 ListOfCoinAmounts 子类列表并添加压缩方法是否有意义?还是我应该使用 CoinAmountUtils 类,它有一个在列表上工作并压缩它的静态方法?

2) 有没有一种方法可以确保该列表实际上只包含 CoinAmounts,或者这是否应该只是假设和遵循(或两者 - 即它可以完成但不应该完成?

3) 以更一般的方式,处理“特定事物列表”的最佳实践“pythonic”方式是什么?

最佳答案

继承 - 当不用于输入时 - 主要是一种非常受限的组合/委托(delegate)形式,因此从 list 继承是一个糟糕的设计。

有一些 CoinContainer委托(delegate)list 是一个更好的设计,因为 1/它让你完全控制API 和 2/它允许您根据需要更改实现(您可能会发现 list 不是满足您需求的最佳容器)。

它也将更容易实现,因为您不必确保覆盖 所有 list 方法和 magicmethods,只覆盖您需要的那些(cf第 1 点)。

wrt/type-cheking,它通常不被认为是 pythonic - 确保它只传递兼容对象是客户端代码的责任。如果你真的想在这里进行一些类型检查,至少使用 ABC并针对此 ABC 进行测试,而不是针对固定类型。

关于Python 类型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com