我有一个快速的问题。通过像这样的返回 func 初始化值是否更 Pythonic:class Game: def __init__(self, AMOUNT_OF_PLAYERS = 2, AMOUNT_OF_CARDS = 7): self.draw_stack = create_draw_stack() self.play_stack = [self.draw_stack.pop()]def create_draw_stack(): VALUES = list(range(1, 10)) COLORS = ["Red", "Blue", "Yellow", "Green"] return [Card(value, color) for value in VALUES for color in COLORS]或者它应该看起来更像这样:class Game: def __init__(self, AMOUNT_OF_PLAYERS = 2, AMOUNT_OF_CARDS = 7): self.draw_stack = [] self.play_stack = [] self.create_draw_stack() self.create_play_stack() def create_draw_stack(self): VALUES = list(range(1, 10)) COLORS = ["Red", "Blue", "Yellow", "Green"] cards = [Card(value, color) for value in VALUES for color in COLORS] self.draw_stack = cards def create_play_stack(self): self.play_stack = [self.draw_stack.pop()]我在网上找不到有关此特定问题的任何内容。是否有经验法则可以直观地解决此类问题?
2 回答

阿晨1998
TA贡献2037条经验 获得超6个赞
这与“pythonic”无关,而只是组成问题(请注意,这是固执己见的)。
关于你的代码。方法#2 的优点是:所有相关代码Game
都“封装”到单个类中(至少,它位于同一个地方)。这使得将来易于管理 - 轻松找到创建/变异的所有内容Game
。
方法#1 的优点是:你有更多的“纯”函数,以后可以重用,而且单独测试更容易一些。可重用性是一件好事——理论上——但过度思考并进行过早的优化是个坏主意,尤其是对于可读性的代价。
您可以将两者结合起来做一件事:保持“无状态”甲板创建而不是改变对象状态,并将其调用__init__
,但让您create_draw_stack
成为类的一部分(即 make it @staticmethod
)以指示堆栈在类范围内的某处使用, [到目前为止] 这Game
是 逻辑的一部分。
添加回答
举报
0/150
提交
取消