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