映射到工厂函数解释中的值元组

Mapping to a tuple of values in a factory function explanation

我在掌握面向对象 Python 中看到了代码片段。

我不明白第2行的语法。我明白rank_str是一个字典。 class_, 语法是什么,它在做什么?

我不明白的另一部分在第 8 行。如果 class_ 是 class 那么为什么在构造函数中需要 suit 而从未被引用?是因为 *Card classes 在其构造函数中将其作为参数吗?

1. def card( rank, suit ):
2.    class_, rank_str= {
3.        1:  (AceCard,'A'),
4.        11: (FaceCard,'J'),
5.        12: (FaceCard,'Q'),
6.        13: (FaceCard,'K'),
7.        }.get(rank, (NumberCard, str(rank)))
8.    return class_( rank_str, suit )

没有特殊语法。 class_ 只是一个变量。由于调用了 dict 的 get 方法,它将最终引用 classes AceCardFaceCardNumberCard 之一。所以 class_(rank_str, suit) 就像调用 AceCard(rank_str, suit)FaceCard(rank_str, suit)NumberCard(rank_str, suit)(取决于为给定输入选择了哪个 class)。

第 2 行的赋值与 a, b = 1, 2 相同。它在一次赋值中分配两个变量。 (这两个值取自dict,可以看到dict中的每一个值都是一个二元组。)

If class_ is a class then why is suit needed in the constructor when it is never referred to? Is it because the *Card classes have it as a parameter in their constructors?

是的。

未命名字典中的值都是两个值的元组。如果 rank 匹配其中的一个键,变量 class_rank_str 将分别被分配相应的元组值。如果没有,那么它们将被分配 NumberCard class 和 str(rank) — 所以这些是默认值。

最后,card() 函数然后 returns 调用 class 的结果分配给 class_ 变量并将 rank_str 的当前值传递给它] 和 suit 作为参数。