2017-05-19 62 views
1

我試圖在超Python的 - 超類方法中創建類的實例

我在SuperTest.py超類創建一個類:

class SuperTest(): 
    def func(self): 
     return Test2() 

而且test.py

from SuperTest import * 

class Test(SuperTest): 
    def create(self): 
     return self.func() 

class Test2(SuperTest): 
    pass 

test = Test() 
print test.create() 

然後我有一個錯誤NameError: global name 'Test2' is not defined

有沒有可能這樣做?如何處理範圍?據我所知,我不能相互遞歸地導入類。

我將在超類功能中獲得一些類名。動態創建類是很重要的。

+3

您不能導入的東西「遞歸」,這意味着一個子模塊無法使用類/函數從「主程序」。你將不得不在'SuperTest.py'中測試'import Test2',否則它不會知道'test2'。在'test.py'中,你也可以執行'builtins .__ dict __ ['Test2'] = Test2' - **注意這不是你應該做的事情**(這將使Test2「真正地全局化」:) – Torxed

+0

在SuperTest.py中定義'Test2'。 –

+0

我想在字符串中獲取一些類名並動態創建它們,例如當調用子類create方法時,eval('Test2')或eval('Test3')等等(還有很多)。有沒有解決方法? – Nakamura

回答

1

試試這個,

class SuperTest(object): 
    def func(self): 
     from Test import Test2 
     return Test2() 
相關問題