php - Python 中面向原型(prototype)设计的功能?

标签 php python prototype-oriented

我编写了一个 PHP 应用程序,但遇到了一个无法在 PHP 中很好解决的问题。所以我正在考虑将其移植到 Ruby 或 Python——这两种我以前从未使用过的语言。据我所知,这个问题可以在 Ruby 中解决,现在我的问题是我是否也可以在 Python 中解决它:

应用程序的核心有一个我想扩展的 A 类。有一个扩展 E1 通过方法 doFoo 扩展 A,还有一个扩展 E2 通过方法 doBar 扩展 A。现在我想使用这两个扩展,而不必更改 A、E1 或 E2 的代码。在 PHP 中,这可以通过编写第三个扩展 E3 来存档,该扩展提供了一个扩展 A 的类 B,并将 E1 和 E2 与特征或其他一些肮脏的技巧混合在一起。但我希望能够拥有核心,拥有这两个扩展,并在配置中包含信息:“使用扩展 E1 和 E2”,而不需要任何更多的类将所有内容放在一起(并且不使用 __call() )。

这在 Python 中可能以任何方式实现吗?我真的不需要可以在运行时更改的原型(prototype)。 A 的每个实例都应该有 doFoo 和 doBar。

编辑:整个事情应该在没有扩展的情况下工作,只有E1(没有E2),只有E2(没有E1)和两个扩展。

最佳答案

正如 mailson 所建议的,多重继承是正确的选择。一个简单的

class E(A, E1, E2):
    ...

应该做你需要的事情。

编辑: 要动态执行此操作,您可以使用类型:

E = type("E", (A, E1, E2), {})

EDIT2:Dougal 比我先一步:D

关于php - Python 中面向原型(prototype)设计的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725546/

相关文章:

Python+MySQL - 批量插入

javascript - JavaScript .prototype 是如何工作的?

php - 当我们知道sql中的大海捞针时,就需要寻找针

javascript - 使用 URL 哈希删除特定 div 上的事件类

php - 在不除以零的情况下计算百分比变化

python - scikit-learn 中回归交叉验证的递归特征消除

python - Numpy:逐列向矩阵添加向量

javascript - 如何创建 Object.prototype 克隆

javascript - javascript中的原型(prototype)行为

php - 使用属性 yaml 映射连接表 - Doctrine