Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 如何接受子类中的附加参数?(不带pylint的参数不同)_Python_Python 3.x_Pylint - Fatal编程技术网

Python 如何接受子类中的附加参数?(不带pylint的参数不同)

Python 如何接受子类中的附加参数?(不带pylint的参数不同),python,python-3.x,pylint,Python,Python 3.x,Pylint,我有一个表示游戏状态的基类,它提供了perform\u move方法: class GameState: # other code def perform_move(self, position: LinePosition) -> MoveResult: # more code 现在我想创建一个子类GameState,它跟踪玩家的得分。 因为基类不关心玩家(关注点分离),所以我需要一个额外的参数来识别执行移动的玩家。 我尝试了以下方法: class ScoreKeepin

我有一个表示游戏状态的基类,它提供了
perform\u move
方法:

class GameState:
  # other code
  def perform_move(self, position: LinePosition) -> MoveResult:
    # more code
现在我想创建一个子类
GameState
,它跟踪玩家的得分。 因为基类不关心玩家(关注点分离),所以我需要一个额外的参数来识别执行移动的玩家。 我尝试了以下方法:

class ScoreKeepingGameState(GameState):
  # other code
  def perform_move(self, position: LinePosition, *, player_identification: Optional[int] = None) -> MoveResult:
    # more code
我希望这能起作用,因为我可以调用
ScoreKeepingGameState
执行移动
而无需
玩家识别
,唉,派林抱怨说:

W0221:参数与重写的“执行移动”方法不同(参数不同)


是否有一种更干净的方法来满足pylint的要求,而不是将
\pylint:disable=arguments different
添加到
perform\u move
ScoreKeepingGameState
的定义中?

有一些快速直接的方法,然后是重新思考继承设计和使用的方法

快速方法:使
在基类中执行_move
接受
*args
**kwargs
参数;然后,继承类也只接受
*args
**kwargs
,这一切都会起作用。我不太喜欢它,因为这样会丢失函数签名,但这会让pylint停止抱怨

更长远的方法是:如果
游戏状态
不应该关心玩家的分数,那么我认为它还有其他单一的责任。
GameState
的子类仍将承担同样的责任;他们只是用一种不同的方式来实现它。但现在你也让它负责计算和跟踪球员的得分。至少我认为这就是被覆盖的
perform\u move
版本应该做的

因此,也许您需要一个单独的类
ScoreKeeper
,只用于跟踪分数,它不应该继承自
GameState

然后你会有一个类负责“处理”玩家的移动。这个类将分别与
游戏状态
通信,告诉它关于线的位置,并与
记分员
通信,告诉它关于玩家的信息