2012-07-05 59 views
0

我創建了一個類,因爲我需要爲該基使用一個變量。 它工作正常,如果我不提供__init__方法,但當我提供一個,我無法致電基地的__init__無法在類中創建的類中調用基__init__()

作品:

def constructor(): 
    blah blah 
    api = importlib.import_module(xtype) 
    mc = type('mc', (api.aclass,), {}) 
    obj = mv(**args) 
    return obj 

不工作,返回 「SystemError: super(): __class__ cell not found

def constructor(): 
    blah blah 
    api = importlib.import_module(xtype) 
    mc = type('mc', (api.aclass,), dict(__init__ = mc__init) 
    obj = mc(**args) 
    return obj 

def mc_init(*args, **kwargs): 
    do_some_stuff 
    super().__init__(*args, **kwargs) 

不工作,返回 「Base mc.__init__ not called.」 後來在創建對象:

def constructor(): 
    global api 
    blah blah 
    api = importlib.import_module(xtype) 
    mc = type('mc', (api.aclass,), dict(__init__ = mc__init) 
    obj = mc(**args) 
    return obj 

def mc_init(*args, **kwargs): 
    global api 
    do_some_stuff 
    api.aclass.__init__(*args, **kwargs) 

x = constructor() 

我怎樣才能撥打init基類?

謝謝。

+0

我強烈建議您將滿足您的答案標記爲「已接受」(綠色複選標記)。你問了7個問題,並沒有一個被接受;這是不尋常的。如果他們知道他們可以希望解決你的問題,你會激勵人們回答。 – EOL

回答

1

我很驚訝你的type電話正在工作; bases應該是一個元組((api.aclass,))。這只是一個錯字嗎?

您的super()(2)中的調用將不起作用,因爲它在類聲明之外; Python 3 super魔法相當複雜,說實話有點脆弱。你可以寫super(mc, self).__init__(*args, **kwargs)

但是,沒有理由不要在這裏使用適當的類聲明(特別是如果您不知道如何使用三參數type); Python完全可以使用可變鹼基聲明的類:

def constructor(): 
    ... 
    api = importlib.import_module(xtype) 
    class mc(api.aclass): 
     def __init__(self, *args, **kwargs): 
      super().__init__(*args, **kwargs) 
    obj = mc(**args) 
    return obj 
+0

謝謝。這是一個錯字,我現在編輯它。 –

+0

'super(mc,self)'不起作用,它會返回:'NameError:全局名稱'mc'未定義',但我想我可以使它成爲全局的。我沒有意識到你可以使用一個變量作爲基礎,它工作並解決了我的問題 –