Python中面向原型的特性?

2024-09-25 04:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在Python中这有可能吗?我真的不需要可以在运行时更改的原型。每个实例都应该有doFoo和doBar。你知道吗

编辑:整个程序应该在没有扩展的情况下工作,只有E1(没有E2),只有E2(没有E1)和两个扩展。你知道吗


Tags: 方法代码语言信息应用程序核心技巧php
2条回答

正如mailson所建议的,多重继承是一条路要走。一个简单的

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

你需要什么就做什么。你知道吗

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

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

编辑2:道格打败了我:D

您可以执行建议的多重继承,而不必这样硬编码:

mixins = (E1, E2)
E = type('E', (A,) + mixins, {})

这就像

class E(A, E1, E2):
    pass

但允许您动态指定mixin。你知道吗

相关问题 更多 >