python - vba 中的模块与面向对象编程

标签 python vba

我的第一个“严肃”语言是 Java,所以我理解面向对象编程,因为程序的基本 block 是一个类。 现在我在 VBA 和 Python 上写作。有模块语言,我一直感到不适:我不知道我应该如何在模块/类中分解程序。

我理解一个模块对应一个知识领域,一个模块应该可以单独测试... 我应该只将模块理解为命名空间(C++)吗?

最佳答案

我不使用 VBA,但在 Python 中,模块是基础。正如您所说,可以将它们视为 namespace ,但它们本身也是对象。但是它们不是类,因此您不能继承它们(至少不能直接继承)。

我发现让一个模块只关注一个领域是一个很好的规则。我用来决定某个东西是模块级函数还是类方法的规则是问自己它是否可以有意义地用于任何满足其参数所采用的“接口(interface)”的对象。如果是这样,那么我将它从类层次结构中释放出来,并使它成为一个模块级函数。如果它的用处确实仅限于特定的类层次结构,那么我将其设为方法。

如果您需要它在类层次结构的所有实例上工作,并使它成为模块级函数,请记住所有子类仍然需要使用给定的语义实现给定的接口(interface)。这是放弃方法的权衡之一:您不能再进行微小的修改并调用 super。另一方面,如果子类可能会重新定义接口(interface)及其语义,那么特定的类层次结构可能不是一个很好的抽象,应该重新考虑。

关于python - vba 中的模块与面向对象编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607020/

相关文章:

excel - 如何从命令行启动 Excel 宏(没有 Worksheet_Open 事件)?

python - 使用python map等功能工具

python - 如何从 PNG 图像中删除第 4 个 channel

python - 如何告诉 `complete` 回退到默认值?

vba - Visual Basic - 变量名自动递增/循环

excel - 当行数 = 0 时删除 Excel 列中的单元格

python - 使用sqlalchemy创建一个mysql数据库

python - 求矩阵内 1s 的最大平方时出错

vba - Application.OnKey 过程错误 - 无法运行宏

excel - 从 Checkbox 宏中排除行或列