Ich bin bei diesem Programm auf das Problem gestoßen das wenn ich x den wert von p.info() zuweise p gelöscht wird. Ich hab auch mit Google nichts dazu gefunden. Deshalb wüsste ich gerne mehr über __del__ und die Garbage Collection. Konkret :
Wie kann ich verhindern das ein Objekt von der Garbage Collection gelöscht wird und es trotzdem löschen ? Warum verschwindet die Referenz (ohne die ja gelöscht wird) ?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Erstellt eine Einkaufsliste
# 11.8.08 Daniel
# Modulimport
import test
import list2txt
artnr = 0
x = 1
list = []
class Product:
'''Ein Produkt mit Artikelnummer, Name, Preis und Anzahl'''
def __init__(self, artnr, name, price, quantity):
self.artnr = artnr
self.name = name
self.price = price
self.quantity = quantity
print "%d %s um insgesamt %.2f € hinzugefügt" % (self.quantity, self.name, (self.price * self.quantity))
def __del__(self):
'''Löscht ein Produkt'''
print "%s gelöscht" % self.name
def info(self):
print "%06d\t%06d\t%8s\t%5.2f" % (self.artnr, self.quantity, self.name, self.price)
return self.artnr, self.quantity, self.name, self.price
while x == 1: # Menu
wahl = raw_input(">>>")
if wahl == "1": # Hinzufügen
print "Was wollen sie hinzufügen ?"
new_item = raw_input("Name: ")
price = input("Preis:")
quantity = input("Anzahl:")
artnr += 1
p = Product(artnr, new_item, price, quantity)
list.append(p)
print p
x = p.info()
Code: Alles auswählen
Einkaufsliste v0.1
Was wollen sie tun ?
1 Etwas zur Liste hinzufügen
>>>1
Was wollen sie hinzufügen ?
Name: Birnen
Preis:1.2
Anzahl:3
3 Birnen um insgesamt 3.60 € hinzugefügt
<__main__.Product instance at 0xb7db616c>
000001 000003 Birnen 1.20
Birnen gelöscht