Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.10.2010, 19:40

Pointer in Python

Ich befinde mich gerade in einem Motivationsloch und wollte deshalb mit python
ein oder zwei Spielchen entwickeln. Allerdings frage ich mich wie ich Instanzen von
klassen ohne Pointer verwalten soll.
Ganz konkret brauche ich die Pointer fuer die Ressourcenverwaltung, da ich ja nicht jede
Ressource x-mal laden kann...
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

07.10.2010, 19:55

In den ctype Modulen findest du sowas wie pointer, aber ansonsten hat Python keinerlei Verwendung für derartige Konstrukte - sprich: in Python gibt es derartiges nicht ;)
Kannst du mal deinen Code zeigen (oder Pseudo-Code) und wo genau du Pointer brauchst? Dann kann ich mal sehen, dass ich dir das in konkretes Python umsetze.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

07.10.2010, 19:56

Die Variablen in Python sind nix anderes als Pointer bzw. Referenzen. Wenn x eine Instanz einer Klasse ist, sorgt "y = x" dafür das y auf die gleiche Instanz zeigt. Wenn du eine Kopie der Instanz haben willst, musst du das explizit mit copy bzw. deepcopy machen (siehe http://docs.python.org/library/copy.html)

BLU3 L30PARD

Treue Seele

Beiträge: 336

Wohnort: Hoch oben im Norden Schleswig Holsteins

Beruf: Schüler

  • Private Nachricht senden

4

08.10.2010, 16:59

Also Zeiger gibt's nicht, aber du kannst so etwas ähnliches machen:
Programmierst du in einer Klasse, kannst du per "self" die Variable für alle def's verwendbar machen,
die in der Klasse implementiert sind.

Bsp:

Quellcode

1
2
3
4
5
6
class Player:
    def __init__(self):
        self.gamepath = os.path.dirname(os.path.abspath(__file__))
        
    def ladePlayerSprite(self):
        playerSprite = pygame.image.load(os.path.join(self.gamepath, "Data/Textures/Player.png"))


Wenn du erstmal soeine self-variable hast kannst du die ja auch ganz einfach importieren...
Ich gehe mal davon aus, dass du weißt wie das geht, oder?

ArthurII

Treue Seele

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

5

09.10.2010, 13:04

Die Variablen in Python sind nix anderes als Pointer bzw. Referenzen. Wenn x eine Instanz einer Klasse ist, sorgt "y = x" dafür das y auf die gleiche Instanz zeigt. Wenn du eine Kopie der Instanz haben willst, musst du das explizit mit copy bzw. deepcopy machen (siehe http://docs.python.org/library/copy.html)
Recht hat er! Also bitte keine Versuche extra Pointer Klassen zu entwerfen! Python ist so eine schöne, leicht lern- und lesbare Sprache. Versaut sie euch nicht mir solchen Konstrukten.


Zu der Ressource: lad sie einmal und übergib sie einfach an die anderen Klassen/Funktionen als ganz normales Argument. Solange der Gültigkeitsbereich des ladens noch besteht, du also noch in der Funktion bist, die die ressource geladen hat, sie ein attribut einer klasse ist oder gar global existiert, übergibst du automatisch "per Referenz"


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Res():
     def __init__(self):
           self.data=load_ressouce()



def funktion1(res):
     bla

def funktion2(res):
     blub


r=Res()

funktion1(r.data)
funktion2(r.data)



mal so als beispiel
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

Werbeanzeige