2017-01-31 2 views
1

Ich habe hier Ressourcen gefunden, aber sie betreffen lokal eingebettete Funktionen. Ich habe eine Datei namens "test" und eine andere namens "main". Ich möchte, dass der Test meine gesamte Logik enthält, während der Hauptteil eine vollständige Liste von Funktionen enthält, die jeweils mit einer Krankenversicherung korrelieren. Es gibt Hunderte von Richtlinien, so dass es ziemlich mühsam werden würde, jedes Mal eine if-Anweisung in "test" zu schreiben. Ich möchte so wenig Zeilen wie möglich schreiben, um eine Funktion basierend auf dem, was ein Wert angibt, aufzurufen. Etwas wie:Aufruf einer Funktion aus einer anderen Datei in einem if-Python 3.x

insurance = input() 

Das Endergebnis wäre keine Eingabe, aber für Test/Lernzwecke ist es. Die Eingabe würde immer genau mit einer Versicherungspolice korrelieren, wenn sie existiert. Also auf „Tests“ Im Moment habe ich:

from inspolicy.main import bcbs, uhc, medicare 

print('What is the insurance?(bcbs, uhc, medicare)') 
insurance = input() 

if insurance.lower() == 'bcbs': 
    bcbs() 
elif insurance.lower() == 'uhc': 
    uhc() 
elif insurance.lower() == 'medicare': 
    medicare() 
else: 
    print('This policy can not be found in the database. Please set aside.') 

Mit „main“ einschließlich:

def bcbs(): 
    print('This is BCBS') 

def uhc(): 
    print('This is UHC') 

def medicare(): 
    print('This is Medicare') 

So ist es eine Möglichkeit, die Eingabe (zB Versicherungen) zu haben, was gegen verwiesen wird, die anrufen Funktion von "Haupt"?

Vielen Dank im Voraus für Ihre Zeit!

Antwort

1

Der beste Ansatz dazu ist, ein Wörterbuch zu verwenden, um zwischen dem Namen Ihrer Versicherungspolicen und der Funktion, die sie behandelt, zu mappen. Dies könnte ein handgefertigter dict in einem Ihrer Module sein, oder Sie können einfach den Namensraum des main Modul verwenden (die ein Wörterbuch realisiert wird):

# in test 
import types 
import inspolicy.main # import the module itself, rather than just the functions 

insurance = input('What is the insurance?(bcbs, uhc, medicare)') 

func = getattr(inspolicy.main, insurance, None) 
if isinstance(func, types.FunctionType): 
    func() 
else: 
    print('This policy can not be found in the database. Please set aside.') 
+0

Du bist der wahre MVP! Vielen Dank für deine Hilfe. Zugegebenermaßen bin ich sicher Anfänger, aber ich mag es immer, die komplizierteren Sachen zu lernen, weil es mir hilft, die anderen Teile auf lange Sicht besser zu verstehen. Ich danke dir sehr! – ResidentBA

0

Betrachten wir dies ist Ihre main.py

def uhc(): 
    print("This is UHC") 

Es ist möglich, so etwas in test.py zu tun:

import main 

def unknown_function(): 
    print('This policy can not be found in the database. Please set aside.') 

insurance = input() 

try: 
    insurance_function = getattr(main, insurance.lower()) 
except AttributeError: 
    insurance_function = unknown_function 

insurance_function() 

Dann, wenn Sie "UHC" als Eingabe eingeben, erhalten Sie die uhc-Funktion von main.py und rufe sie auf.

+0

Vielen Dank für mich immer wieder so schnell! – ResidentBA

Verwandte Themen