【问题标题】:Python: How To Construct A Class With Many ParametersPython:如何构造具有许多参数的类
【发布时间】:2015-06-30 20:02:31
【问题描述】:

我在决定如何组织我的课程时有点困难。我拥有的是一个棒球运动员类和以下必要属性:

  • 玩家 ID(来自数据库的密钥)
  • 姓氏
  • 名字
  • 团队
  • 位置
  • 对手
  • 大约 10 或 11 个统计数据(历史数据)
  • 大约 10 或 11 个统计数据(预计)
  • 投手对决
  • 天气
  • ...以及更多

一些事情来分解一下:

1) 将统计数据放入字典中

2) 创建一个团队类,可以保存团队中所有玩家通用的一般信息,例如天气和投手比赛。

但是,在这之后我还有 10 个属性。

看到这个 (Class with too many parameters: better design strategy?) 给了我一些想法,但不知道它们是否理想。

1) 使用字典 - 但是不能使用方法来计算统计数据(或者必须使用单独的函数)

2) 使用 args/kwargs - 但据我所知,这些似乎是用于可变数量的参数,并且我的所有参数都是必需的。

3) 分成更小的班级——我已经把它分成了一点,但不知道我能不能更进一步。

有没有更好的方法来构建这个而不是列出一个列出一堆参数的类?

【问题讨论】:

  • 使用 args/kwargs 不仅适用于可变数量的参数。并且使用字典不会阻止您使用方法或计算统计数据。

标签: python class parameters


【解决方案1】:

如果您从数据库设计的角度考虑这一点,那么拥有一个具有以下参数的BaseballPlayer 对象可能会很奇怪:

  • 团队
  • 位置
  • 对手
  • 大约 10 或 11 个统计数据(历史数据)
  • 大约 10 或 11 个统计数据(预计)
  • 投手对决
  • 天气

因为与特定的BaseballPlayer 相关的某些事物保持相对固定,例如名称等,但这些其他事物是流动的和暂时的。

如果您将此应用程序设计为具有各种数据库表的应用程序,那么,这里列出的每个事物都可能代表一个单独的表,并且BaseballPlayer 与这些其他表的关系相当于当前和以前的关系Team

因此,我可能会将问题分解为更多类,包括 StatsClassTeam 类(这可能是 Opponent 的真正含义......)。

但这一切都取决于你想做什么。通常,当您向后弯腰将数据塞入一个结构或做同样的事情以将其取出时,可以重新设计设计以使您的工作更轻松。

【讨论】:

  • 是的,我打算将球队中相同的任何东西放入球队类(对手、投手对决、天气……),然后让球队对象成为球员的属性.在这之后它仍然很麻烦,但我没有想过将它进一步分解为统计类。我想如果我要隔离这些,我认为它会使 Player 类更干净。
猜你喜欢
  • 2010-09-18
  • 2022-09-30
  • 2016-02-26
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多