2016-05-04 7 views
0

Ich versuche, ein Paket in Python laden 3.5Wie Modul-, Klassen- und Attribute dynamisch in Python 3.5 Paket

Mein Code-Verzeichnis zu bauen als

mypackage 
    |-- requirements.txt 
    |-- setup.py 
    |--vehicle 
     |-- __init__.py 
     |-- testdrive.py 
     |-- cars 
     |-- __init__.py 
     |-- basecar_abstract_class.py 
     |-- prius.py 
     |-- volt.py 
     |-- leaf.py 
     |-- tesla.py 
     |-- civic.py 
     |-- there could be 100 of car classes .... 

folgt Alle Fahrzeuge abstrakte Klasse erweitern definiert in basecar_abstract_class. Und run Methode ist eine abstrakte Methode, die

testdrive.py Code-Schnipsel in jedem Wagen der Klasse definiert werden muss, ist wie folgt:

class TestDrive(object): 

    def __init__(self): 
    pass 

    def runmycar(carname): 
    # if tesla is passed as car name, then I want 
    # it should first load tesla from cars module *DYNAMICALLY* 
    # so that I can call tesla's run method defined in tesla.py 
    # vehicle.tesla.run() ?? 

So ist meine Fragen: wie Modul und Klasse laden dynamisch gefragt Auto (auch im Kommentar erwähnt). Genauer gesagt, ich möchte wissen, was die Änderungen sind (Linie Hinzufügen/Bearbeiten), muss ich in testdrive.py tun, um mein Ziel

Derzeit mein __init__.py in cars Ordner ist nur leer zu erreichen. Denkst du, ich muss dort auch Code eingeben, um mein Ziel zu erreichen?

Antwort

0
import importlib 

import cars 

def runmycar(car_name): 
    #car_name = 'Tesla' 
    module_name = '.' + car_name.lower() 

    mod = importlib.import_module(module_name, 'cars') 
    cls = getattr(mod, car_name) 

    obj = cls() 
    obj.run() 
Verwandte Themen