Python类实例化: What does it mean when a class is called without accompanying arguments?

标签 python class

我正在尝试理解我在 github 上找到的一些代码。本质上有一个名为“HistoricCSVDataHandler”的类,它是从另一个模块导入的。在主方法中,该类作为参数传递给另一个类“回测”。

如何调用不代表实例化变量的类名而不引发 NameError。

或者简单地说:

为什么/如何调用该类:

Backtest(HistoricCSVDataHandler)

而不是:

CSV_Handler = HistoricCSVDataHandler(foo,bar,etc)
Backtest(CSV_Handler)

See line 110 for code.

问候

最佳答案

这是一种名为 dependency injection 的技术。类就像任何其他对象一样是一个对象,因此将其作为参数传递给函数然后在函数内调用它没有任何问题。

假设我想读取一个字符串并获取一个 int 或一个 float 返回。我可以编写一个函数,将所需的类作为参数:

def convert(s, typ):
    return typ(s)

调用它提供了几种可能性:

>>> convert(3, str)
'3'
>>> convert('3', int)
3
>>> convert('3', float)
3.0

因此,代码中的 Backtest 函数很可能会创建您传递的任何类的实例 - 它在内部调用 HistoricCVSHandler创建该类的一个实例。

我们通常将 Python 对象视为某个类的实例。类与对象类似,实际上是所谓的元类的实例,默认情况下,对于从对象继承的类来说,元类是类型

>>> class MyClass(object): pass
... 
>>> type(MyClass)
<type 'type'>

关于Python类实例化: What does it mean when a class is called without accompanying arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488061/

相关文章:

python - Python numpy 中缺失值的奇怪计时

python - 如何使用 Python OpenCV 查找图像中的极端外部点

python - 在pygame中画一个圆到一个表面

jQuery 按类顺序中的数字禁用复选框

javascript - 为什么 TypeScript 会为类生成 IIFE?

python - 为什么我应该在 python 中使用类?

c# - 高效的临时数据集

python - 将数组从单元格移动到列标题和行值

python - 如何使用正则表达式和 lambda 表达式更改 DataFrame 列 dtype?

C++ 模板仅限于基类及其派生类