【问题标题】:Python `template` equivalentPython“模板”等价物
【发布时间】:2021-12-15 20:02:03
【问题描述】:

在 Python 中最有效的 C++ 模板是什么?例如我将如何实现以下内容:

template<unsigned X, unsigned Y>
class SomeType {
...
}

我目前的想法是使用类似的东西:

def FooFactory(*params):
  class FooCreated:
    # do stuff with params
    ...
  return FooCreated

但这感觉非常骇人听闻。创建这种行为的最佳方法是什么?

在我的示例中,我还需要 FooCreated 才能被子类化。

【问题讨论】:

  • 这2个代码sn-ps有什么关系? C++ 代码对XY 有什么作用,与子类化有什么关系?
  • 以 C++ 为例,想象每个函数和每个类都是一个模板。这就是 Python,开箱即用。

标签: c++ python-3.x oop templates


【解决方案1】:

tl;dr:没有意义,你不需要等价物。

模板是一种允许编译时多态性的 C++ 机制:当用不同的类型实例化时,会生成不同的代码——它们的行为可能不同。它可以是模板函数,也可以是您的示例中的模板类。这很重要,因为通常 C++ 是一种静态类型语言。因此,如果你有:

template<unsigned X>
class SomeType {
   std::array<int, X> a;
}

那么SomeType&lt;3&gt;SomeType&lt;4&gt; 是完全不同的类型。您不能将一个实例分配给另一个实例,也不能将一个实例传递给另一个函数,等等。实际上,即使 a 成员实际上并不依赖于 @,它们也会完全不同987654327@。

Python 是一种动态类型语言。因此,您可以定义一些变量,使用一种类型的值对其进行初始化,然后将该值完全替换为另一种类型的值。在 C++ 术语中,就好像你有一个 int x = 123;,你给它分配了 std::string("hello") - 它变成了一个 std::string x,值为 "hello"s。当您的语言具有这种特性时,您无需费心用不同的成员等实例化类型模板 - 您只需将您喜欢的任何类型的值放入变量、列表的元素或其他任何类型的值即可。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 2019-06-03
    • 2011-01-10
    • 1970-01-01
    • 2016-10-10
    • 2012-06-24
    • 2015-12-22
    • 2016-05-13
    相关资源
    最近更新 更多