2017-05-19 5 views
1

ich eine Klasse in der OberklassePython - Erstellen von Klasseninstanz innerhalb Oberklassenmethode

ich eine übergeordnete Klasse in SuperTest.py habe zu schaffen versuchen:

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

Und test.py

from SuperTest import * 

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

class Test2(SuperTest): 
    pass 

test = Test() 
print test.create() 

Dann habe ich einen Fehler NameError: global name 'Test2' is not defined.

Ist es möglich, das zu tun? Wie man mit dem Umfang umgeht? Wie ich weiß, kann ich die Klassen nicht gegenseitig rekursiv importieren.

Ich werde einige Klassennamen in der Oberklasse-Funktion bekommen. Es ist wichtig für mich, die Klasse dynamisch darin zu erstellen.

+3

Sie können nicht Sachen importieren „rekursiv“, ein Submodul Sinn kann nicht Klassen/Funktionen aus dem „Hauptprogramm“ verwenden. Sie müssten 'vom Test-Import Test2' in' SuperTest.py' machen - sonst wird es nicht über 'test2' wissen. In 'test.py' könntest du auch 'builtins .__ dict __ [' Test2 '] = Test2' - ** beachten, dass dies nicht die Art ist, wie du Dinge tun solltest ** (dadurch wird Test2" wirklich global ":) – Torxed

+0

Definieren Sie 'Test2' in SuperTest.py. –

+0

Ich möchte einen Klassennamen in einer Zeichenfolge abrufen und sie dynamisch erstellen, z. eval ('Test2') oder eval ('Test3') usw. (und davon gibt es viele) beim Aufruf der Methode create der Unterklasse. Gibt es einen Workaround dafür? – Nakamura

Antwort

1

Try this,

class SuperTest(object): 
    def func(self): 
     from Test import Test2 
     return Test2() 
Verwandte Themen