Python, Variablen deklarieren?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Python, Variablen deklarieren?

Beitrag von Tiles »

Halp. Ich renne mir hier grade an Basics das Hirn ein ^^

Die ganz kurze Version. Ich will in diesem def hier den for Loop limitieren dass er pro Pluginaktivierung nur einmal läuft. Das ermittelt mir die Strings. Und die müssen ja nicht jeden Loop neu berechnet werden. Das frisst nur Ressourcen:

Code: Alles auswählen

# the mode text.
def draw_modetext(self, context, obj):
    
    # ------------- String Variables

    move_obj_string =""
 
   # ------------ Get the hotkeys -------------------------------------------------
    
    wm            = bpy.context.window_manager # Blender window manager
    keymaps_3DV   = wm.keyconfigs['Blender User'].keymaps['3D View'] # 3D View hotkeys, Blender User for actual hotkeys
    
    for (item, km) in keymaps_3DV.keymap_items.items(): # all the items in the tuple for 3D View
        
        # ------------- Move object
        try:
            if item == 'transform.translate'":             
                move_obj_string += km.type
        except:
            move_obj_string = "not defined"
Die etwas längere Version:

Das def hier wird natürlich von einer class aufgerufen.

In Unity ist das Arbeiten mit Variablen eigentlich ganz einfach. Oben in der Klasse hinschreiben zum definieren. Und dann kann man im gesamten File damit arbeiten. Und die Variable so ändern wie man lustig ist. Und diese Variable behält dann auch ihren Wert. In Unity hätte ich hier also einfach eine Flag eingebaut, auf False getestet, den Code abgearbeitet, und die Flag dann auf True gestellt. Done.

In Pyhton scheint die Sache ein wenig verzwickter zu sein. Denn in der Klasse lässt mich das Vieh die Variable nicht setzen. Meckert mir dann im def von wegen Referenzfehler. Und wenn ich die Variable im def deklariere, dann wird mir diese Variable bei jedem Aufruf sofort wieder auf False gesetzt. Definiere ich sie ausserhalb der Klasse bekomme ich einen Referenzfehler. Mache ich sie global muss ich sie erst wieder in einer Klasse definieren. Und sie wird wieder bei jedem Durchlauf auf False ... So wirds natürlich niemals was von wegen Kondition beenden weil die Variable True ist ^^

Auch nach längerem Suchen werde ich da einfach nicht fündig. Wie deklariere ich denn in Python eine Variable so dass ich mit dem Wert auch arbeiten kann? Und mir das nicht jedesmal wieder auf den Initiierungswert gesetzt wird? Ich steh hier grad echt komplett auf dem Schlauch ^^
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Python, Variablen deklarieren?

Beitrag von dot »

Python ist eine dynamische Programmiersprache, sowas wie Deklarationen gibt's in Python nicht wirklich. Was du willst ist wohl:

Code: Alles auswählen

class Blub:
  def __init__(self):
    self._flag = False

  def draw_modetext(self, context, obj):
    # ...
    self._flag = True
Alexander Kornrumpf
Moderator
Beiträge: 2106
Registriert: 25.02.2009, 13:37

Re: Python, Variablen deklarieren?

Beitrag von Alexander Kornrumpf »

In python must du vor "Membervariablen" immer explizit self. schreiben.

Also

Code: Alles auswählen


class Foo:
    def __init__(self):
        self.member = "I'm a member"
        local = "I'm a local"

Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Python, Variablen deklarieren?

Beitrag von Tiles »

Verstehe. Hoff ich ^^

Ich versuch es mal umzusetzen, und melde mich dann wieder. Vielen Dank erst mal :)

EDIT sagt, perfekt. Danke :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Antworten