Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类实例化:当调用一个类而不附带参数时,它意味着什么?_Python_Class - Fatal编程技术网

Python类实例化:当调用一个类而不附带参数时,它意味着什么?

Python类实例化:当调用一个类而不附带参数时,它意味着什么?,python,class,Python,Class,我试图理解我在github上找到的一些代码。本质上,有一个名为“HistoricCcsvDataHandler”的类,它是从另一个模块导入的。在main方法中,该类作为参数传递给另一个类“backtest” 如何调用不表示实例化变量的类名而不引发NameError 或者简单地说: 为什么/如何将该类称为: Backtest(HistoricCSVDataHandler) 而不是: CSV_Handler = HistoricCSVDataHandler(foo,bar,etc) Backtes

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

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

或者简单地说:

为什么/如何将该类称为:

Backtest(HistoricCSVDataHandler)
而不是:

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


关于

代码的链接会很有用,但在python中,您可以像这样传递未实例化的对象。i、 e:

def f(uninst_class, arg):
     return uninst_class(arg)

将python变量视为标签,您可以标记一个类(没有实例),这就像为该类提供别名一样

>>> class A(): pass
>>> A
<class __builtin__.A at 0x000001BE82279D08>
>>> b = A
>>> b
<class __builtin__.A at 0x000001BE82279D08>
>>> a = b()
>>> a
<__builtin__.A instance at 0x000001BE82269F48>
>>> A()
<__builtin__.A instance at 0x000001BE82269708>
>A类():通过
>>>A
>>>b=A
>>>b
>>>a=b()
>>>a
>>>()
与Functions参数相同,您可以将类(无实例)传递给函数以供以后使用

>>> def instantiator(c):
...     return c()
...     
>>> c = instantiator(b)
>>> c
<__builtin__.A instance at 0x000001BE8226A148>
>>> c = instantiator(A)
>>> c
<__builtin__.A instance at 0x000001BE8226A288>
def实例化器(c): ... 返回c() ... >>>c=实例化器(b) >>>c >>>c=实例化器(A) >>>c
这是一种称为。类和其他类一样是一个对象,因此将其作为参数传递给函数,然后在函数内部调用它并没有什么错

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

def convert(s, typ):
    return typ(s)
调用此选项可以提供几种可能性:

>>> convert(3, str)
'3'
>>> convert('3', int)
3
>>> convert('3', float)
3.0
因此,代码中的
Backtest
函数最有可能创建您通过的任何类的实例-即,它在内部调用
historiccvshHandler
来创建该类的实例

>>> class A(): pass
>>> A
<class __builtin__.A at 0x000001BE82279D08>
>>> b = A
>>> b
<class __builtin__.A at 0x000001BE82279D08>
>>> a = b()
>>> a
<__builtin__.A instance at 0x000001BE82269F48>
>>> A()
<__builtin__.A instance at 0x000001BE82269708>
我们通常认为Python对象是某个类的实例。类也是类似的对象,实际上是它们所谓元类的实例,对于从对象继承的类,默认情况下元类将是
类型

>>> class MyClass(object): pass
... 
>>> type(MyClass)
<type 'type'>
>>类MyClass(对象):传递
... 
>>>类型(MyClass)

最有可能是因为他们希望在
Backtest
的实例中组成
HistoricCSVDataHandler
类。您应该检查
Backtest
\uuuuu init\uuuuu
方法,以确保类与其他对象一样。它们在python中并不特别。你可以把它们像数字、字符串、函数或其他东西一样传递给别人。也许
Backtest
然后会创建它作为参数接收的类的实例。类名和其他任何名称一样,只是一个变量名。导入它只是在进行导入的名称空间中引入名称,并将导入的值绑定到名称空间中。类是Python中的对象。在Python中,一切都是一个对象。在没有看到代码的情况下,我们只能猜测动机,但它并不特别奇怪。您传递到
f
的对象是
类类型的一个实例,因此它不是真正的非实例化对象。。。