映射到工厂函数解释中的值元组
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 AceCard
、FaceCard
或 NumberCard
之一。所以 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
作为参数。
我在掌握面向对象 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 AceCard
、FaceCard
或 NumberCard
之一。所以 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
作为参数。