2010-04-08 47 views
0

我用Python寫了一個函數:如何「解除」一個對象?

def instantiate(c): 
    if inspect.isclass(c): return c() 
    elif isinstance(c, object): return c 
    else: raise Exception, '%s is not an object or class.' % c 

現在我想要做的相反:從已經實例化對象獲取類,這樣我可以用不同的參數重新初始化它。我怎樣才能做到這一點?


測試:

>>> f = Form() 
>>> type(f)() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: instance() takes at least 1 argument (0 given) 
>>> f.__class__() 
<forms.Form instance at 0xb7f4d5cc> 

更多的測試:

>>> o = object() 
>>> type(o)() 
<object object at 0xb7f78478> 
>>> o.__class__() 
<object object at 0xb7f78480> 

似乎爲object,但不是我的Form類工作:

class Form: 
    def __init__(self, data={}, prefix='', action='', id=None): 

我猜這有做某事用self但我不知道是什麼。

+1

使用'class Form(object):'來創建一個閃亮的漂亮的新式類,而不是Python 2爲了兼容性而強制拖拽的笨拙的舊式遺留類,一切都會好的。 Python 3中最大的改進就是最終擺脫那些可怕的殭屍世界 - 舊式類(在Python 3中,你的代碼工作正常[[raise語句語法除外]])。 – 2010-04-08 14:20:11

回答

2

的類對象c的是type(c)

+0

不是。它告訴我'c'是什麼類,但不讓我重新實例化它。 – mpen 2010-04-08 04:43:12

+0

@Mark,嘗試此類型(c)() – 2010-04-08 05:08:48

+0

是的。它非常重要。試試看看。 – jemfinch 2010-04-08 05:09:00

3

要獲得類X

x.__class__ 
+0

'x .__ class __()'似乎工作。謝謝! – mpen 2010-04-08 04:43:40