gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:55 24 4
gpt4 key购买 nike

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

如何在不引发 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 对象视为某个类的实例。类是类似的对象,实际上是它们所谓的 元类 的实例,对于从对象继承的类,默认情况下是 type

>>> 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com