如何从作为参数传递的类初始化对象

时间:2014-12-25 18:21:07

标签: python function class oop object

我试图将一个类作为参数发送给一个函数,然后在该函数中创建该类的一个对象,并使用该对象。但是,我的尝试导致错误。

def test(some_class):
    x = some_class() # first attempt
    x = some_class.__init__() # second attempt

第一次尝试产生了此错误:AttributeError: Table instance has no __call__ method,第二次尝试产生了此错误: TypeError: unbound method __init__() must be called with Table instance as first argument (got int instance instead)

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

第一个错误告诉您,您正在传递类的实例,而不是类本身,作为函数的参数!这就是Python解释的原因

x = some_class()

作为调用到实例,而不作为类的实例化(创建)。

以下是您想要做的事情的实例:

In [1]: class Table(object):
   ...:     def __init__(self, number):
   ...:         self.number = number
   ...:

In [2]: def test(some_table):
   ...:     x = some_table(5)
   ...:     return x.number == 5
   ...:

In [3]: test(Table)
Out[3]: True

我想(但我猜这里)你已经做了一些事情:

In [5]: a_table = Table(10)

In [6]: test(a_table)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-c3b83a3a3118> in <module>()
----> 1 test(a_table)

<ipython-input-2-01a30f6ba7b1> in test(some_table)
      1 def test(some_table):
----> 2     x = some_table(5)
      3     return x.number == 5
      4

TypeError: 'Table' object is not callable

不要创建a_table,只需将Table传递给您的函数。