abhängige Submodule

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cc33
User
Beiträge: 5
Registriert: Freitag 19. August 2016, 13:51

Hallo Community,
ich bin sehr neu in der Pythonsphäre. Momentan arbeite ich daran eine Automatisierung für Abaqus in Python zu schreiben. Jedoch habe ich folgende Frage:
Ich habe ein Hauptprogramm und 5 Subprogramme.
Im Hauptprogramm habe ich alle Submodule importiert und es klappt. Sprich kann alle Funktionen und Variablen die ich im Submodul deklariert habe aufrufen und verwenden.
Jedoch habe ich den Fall, dass bei mir zwei Submodule abhängig von einander sind. Wie kann ich die Variablen von Submodul1 unter Submodul2 verwenden? Wenn ich Submodul1 importiere bekomme ich eine Fehlermeldung.
Beispiel:
Submodul 1:
def Mat(Mat1,em1,qkz1):
mdb.models['Model-1'].Material(name=Mat1)
mdb.models['Model-1'].materials[Mat1].Elastic(table=((em1,
qkz1), ))

Submodul 2:
def Sections(Sec1):

mdb.models['Model-1'].HomogeneousShellSection(idealization=NO_IDEALIZATION,
integrationRule=SIMPSON, material=Mat1, name=Sec1, numIntPts=5,
poissonDefinition=DEFAULT, preIntegrate=OFF, temperature=GRADIENT,
thickness=2, thicknessField='', thicknessModulus=None, thicknessType=
UNIFORM, useDensity=OFF)

Es handelt sich um die fettgedruckte Variable.
Vielen Dank im Voraus.
Zuletzt geändert von cc33 am Freitag 19. August 2016, 14:05, insgesamt 1-mal geändert.
BlackJack

@cc33: Variablen sollten in Modulen auf Modulebene überhaupt nicht existieren. Und ich habe so ein bisschen die Befürchtung beim Importieren verwendest Du den *, was man auch nicht machen sollte. In Modulen, auf Modulebene, sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Werte werden als Argumente übergeben und sollten nicht als Variablen auf Modulebene existieren.
cc33
User
Beiträge: 5
Registriert: Freitag 19. August 2016, 13:51

@BlackJack: Verwende * nicht beim importieren von Modulen. Mein Ziel ist es eigentlich, dass ich den Übergabewert als Variable definiere und es dann im Hauptprogramm ändern kann. Srpich wenn ich statt 'Aluminium' -- 'Kohlenstofffaser' schreibe, möchte ich dass es überall geändert wird :/
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@cc33: Variablen werden überall dort, wo sie gebraucht werden, als Argumente übergeben. Dann kannst Du einfach im Hauptprogramm Aluminium statt Kohlenstofffaser übergeben und überall wird mit dem geänderten Wert gerechnet.
BlackJack

@cc33: Im ersten Modul ist das ein Parameter von der Funktion, also sowieso ein lokaler Name der nur innerhalb der Funktion sichtbar ist. Im zweiten Beispiel ist nicht ersichtlich wo der Wert herkommen sollte, weil der Name einfach so aus dem nichts zu kommen scheint.
cc33
User
Beiträge: 5
Registriert: Freitag 19. August 2016, 13:51

@Sirius3: Sprich ich müsste dann in jeder Definition die Argumente angeben.
Und im Hauptprogramm bei jeder Funktion die Argumente ändern.
Beispiel:
Submodul1:
def Mat(Mat1):
-------- =Mat1-----------------

Submodul2
def Section(Mat1, Sec1)
----------------=Sec1----[Mat1]--------

Hauptmodul
Submodul1.Mat(´Aluminium')
Submodul2.Section('Aluminium','AluSection')

Meinen Sie es so?
cc33
User
Beiträge: 5
Registriert: Freitag 19. August 2016, 13:51

@BlackJack: Genau da ist mein Problem. Ein Logikfehler! Weiß aber nicht wie ich es elegant lösen könnte.
Sollte ich im Hauptprogramm es als global string definieren und es dann als Argument weitergeben?
cc33
User
Beiträge: 5
Registriert: Freitag 19. August 2016, 13:51

@all: Vielen Dank habe es hinbekommen. In der Tat müsste ich es erst mal deklarieren. Vielen herzlichen Dank für die schnellen Antworten und schönes Wochenende.
Antworten