python - 如何在 Python 中设计一个类?

标签 python oop class-design

我以前的问题得到了一些非常棒的帮助 for detecting pawstoes within a paw ,但所有这些解决方案一次只能用于一次测量。

Now I have data这包括:

  • 大约 30 只狗;
  • 每个都有 24 个测量值(分为几个子组);
  • 每次测量至少有 4 个接触点(每个爪子一个)和
    • 每个联系人分为5个部分和
    • 具有多个参数,例如接触时间、位置、总力量等。

alt text

显然,将所有东西都粘在一个大对象中并不能解决问题,所以我认为我需要使用类而不是当前的大量函数。但是即使我已经阅读了学习 Python 中关于类的章节,我也无法将它应用到我自己的代码中(GitHub link)

我也觉得每次我想得到一些信息时处理所有数据是相当奇怪的。一旦我知道了每只爪子的位置,我就没有理由再计算它了。此外,我想比较同一只狗的所有爪子,以确定哪个接触属于哪个爪子(前/后,左/右)。如果我继续只使用函数,这将变得一团糟。

所以现在我正在寻找有关如何创建类的建议,这些类可以让我以合理的方式处理我的数据 (link to the zipped data of one dog)。

最佳答案

如何设计一个类。

  1. 写下单词。你开始这样做了。有些人不知道他们为什么会遇到问题。

  2. 将你的词组扩展为关于这些对象将要做什么的简单陈述。也就是说,写下你将对这些事情进行的各种计算。您的 30 条狗、24 次测量、4 次联系人和每个联系人的几个“参数”的简短列表很有趣,但这只是故事的一部分。您的“每只爪子的位置”和“比较同一只狗的所有爪子以确定哪个接触属于哪个爪子”是对象设计的下一步。

  3. 在名词下划线。严重地。有些人争论这个的值(value),但我发现这对于初次接触 OO 的开发人员来说是有帮助的。在名词下划线。

  4. 复习名词。像“参数”和“测量”这样的通用名词需要用特定的、具体的名词替换,这些名词适用于您的问题域中的问题。细节有助于澄清问题。泛型只是省略了细节。

  5. 对于每个名词(“contact”、“paw”、“dog”等),写下该名词的属性以及该对象参与的 Action 。不要走捷径。每个属性。例如“数据集包含 30 条狗”很重要。

  6. 对于每个属性,确定这是否与定义的名词相关,或者是其他类型的“原始”或“原子”数据,如字符串或 float 或不可约的东西。

    <
  7. 对于每个 Action 或操作,您必须确定哪个名词负责,哪些名词仅参与。这是一个“可变性”的问题。有些对象会更新,有些则不会。可变对象必须对其突变承担全部责任。

  8. 此时,您可以开始将名词转换为类定义。一些集合名词是列表、字典、元组、集合或命名元组,您不需要做很多工作。其他类更复杂,要么是因为复杂的派生数据,要么是因为执行了一些更新/变异。

不要忘记使用 unittest 单独测试每个类。

此外,没有规定类必须是可变的。例如,在您的情况下,您几乎没有可变数据。您拥有的是派生数据,由源数据集中的转换函数创建。

关于python - 如何在 Python 中设计一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4203163/

相关文章:

python - 从数据生成器返回 3 张图像

python - 谁更新 pip 包版本?

c++ - 使用 vector 作为私有(private)/公共(public)成员的类设计?

c# - .Net 中最简单的唯一标识符是什么?

java - 卡片组,继承问题?

Python - 获取所有目录的文件扩展名

python - 如何从不同位置的文本文件返回数字列表

java - 使Java中的String数据结构更加高效

javascript - 如何在 Javascript 中使用 getter 和 setter

C#/面向对象的设计——维护有效的对象状态