Pinnwand

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
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ich hab so ein kleiner Problem, ich schreibe grad an einer kleien Pinnwand, aber da will was nicht wirklich funktionieren und ich versteh nicht warum, vieleicht könntet ihr mal drauf schauen.

http://paste.pocoo.org/show/128481/

das Problem ist bei getNotice, der sagt mir da immer TypeError: unbound method toattch() must be called with Pinboard instance as first argument (got str instance instead)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Die Klasse `Pinboard` muss halt instanziert werden. In deine `__init__()` von `Desktop` sollte daher ein:

Code: Alles auswählen

self.__pw = Pinboard()
(die Klammern fehlen bei dir)

Für Probleme dieser Art würde man aber eigentlich eher das Forum für `Allgemeine Fragen` nutzen. ;) Hier kommen in der Regel fertige Sachen rein, die man der Community präsentieren und dazu etwas Rückmeldung erhalten will.
Zuletzt geändert von snafu am Dienstag 14. Juli 2009, 13:15, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann tu doch auch was die Fehlermeldung sagt.
Hint: Schau mal in Zeile 45.

Und wenn du gleich dabei bist: Veraendere ``__`` zu ``_``. Gleiches gilt fuer den oberen Teil. Du missbrauchst hier Features, die fuer anderes gedacht sind und auch nicht das Ziel der Kapselung erfuellen koennen: In Python gibt es kein ``private``!

Edit: Boeser snafu! :twisted:
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ahso oke verstehe vielen dank, dan stehts bei mir im Buch falsch, deswegen. Haben wir ma wieder was gelernt :P Danke nochma
Zuletzt geändert von cz3kit am Dienstag 14. Juli 2009, 13:17, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

cofi hat geschrieben:Edit: Boeser snafu! :twisted:
*fauch* *kratz* *beiß* *würg*
*um-den-nächsten-noob-kämpf*

:evil: :evil: :evil:
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Nicht hauen xD Ich mach das mit dem Instantizieren heute das erst mal und ich dachte mein Buch wäre einigermassen gut, aber da sind ja voll die Fehler drin -.-
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

cz3kit hat geschrieben:Haben wir ma wieder was gelernt :P
Wenn das fertig ist, kannst du's ja nochmal hier reinstellen. Ich glaube, da gibt es noch die ein oder andere weitere Sache zu optimieren...
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Also so in etwa soll es aussehen, ich wüsste jetzt nicht was ich da noch großartig machen soll

http://paste.pocoo.org/show/128498/
Haben wir mal wieder was gelernt :P
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

cz3kit hat geschrieben:Also so in etwa soll es aussehen, ich wüsste jetzt nicht was ich da noch großartig machen soll

http://paste.pocoo.org/show/128498/
getPriority wandelt die Memo mehrfach in uppercase und geht mehrfach durch die ganze memo um worte zu zählen. Besser wäre eine Regex verwenden und mit ignorecase suchen lassen. Das geht nur einmal durch die Memo und spart sich das kopieren nach uppercase.

toattach sortiert jedesmal die Liste neu, obwohl nur ein einziges element nicht sortiert ist. Besser wäre es das neue memo direkt dort einzufügen wo es hingehört.

delete wird üblicherweise pop genannt.

Der if ... elif ... Block in Desktop könnte durch ein Dictionary besser gelöst werden:

Code: Alles auswählen

{ 'N': getNotice}[key]()
Und die Kommentare sollten wohl Docstrings sein.

Edit: und __str__ muss für jede Zeile den bisherigen String kopieren um den neuen dranzuhängen. Besser wäre join.

Edit (Leonidas): Thread verschoben.
http://www.felix-benner.com
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Hi
getPriority wandelt die Memo mehrfach in uppercase und geht mehrfach durch die ganze memo um worte zu zählen. Besser wäre eine Regex verwenden und mit ignorecase suchen lassen. Das geht nur einmal durch die Memo und spart sich das kopieren nach uppercase.
was ich nicht verstehe ist was du mit Regex meinst
delete wird üblicherweise pop genannt.
wird das immer pop genannt, oder wie schauts das aus?
Der if ... elif ... Block in Desktop könnte durch ein Dictionary besser gelöst werden:
aber sollte ich das dict dan gleich am anfang der klasse definieren oder wie sollte das aussehen?
Und die Kommentare sollten wohl Docstrings sein.
Docstring hab ich noch net
Haben wir mal wieder was gelernt :P
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

cz3kit hat geschrieben: was ich nicht verstehe ist was du mit Regex meinst
Gemeint sind regular expressions. Sie sind ziemlich mächtig, jedoch alles andere als einfach zu lesen, also nicht unbedingt pythonisch.
cz3kit hat geschrieben:
delete wird üblicherweise pop genannt.
wird das immer pop genannt, oder wie schauts das aus?

Code: Alles auswählen

notice = self.__note[0][1]
del self.__note[0]
würde man eher schreiben als:

Code: Alles auswählen

notice = self.__note.pop([0])[1]
Siehe Mutable Sequence Types.
cz3kit hat geschrieben:Docstring hab ich noch net
Sie machen Python-Programme erst schön. :)
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Oke dan lass ich die Regey ma weg, wenn es so schwer zu lesen ist, kommt dan später ma dran :P
Code: (Python)
notice = self.__note[0][1]
del self.__note[0]

würde man eher schreiben als:
Code: (Python)
notice = self.__note.pop([0])[1]

Siehe Mutable Sequence Types.
oke jetzt versteh ich was mit pop gemeint ist, aber wenn ich es ausführe sag er mir Type Error: integer is required

Code: Alles auswählen

def delete(self):
        notice = ""
        notice = self.__note.pop([0])[1]
        
würde das ganze dan so aussehen? Und wenn ich das richtig verstehe wird dan auch kein return mehr benötigt
Haben wir mal wieder was gelernt :P
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Das

Code: Alles auswählen

notice = ""
ist überflüssig. Und das return entfällt, genau. Dafür hatte ich einen Fehler eingebaut, es heißt:

Code: Alles auswählen

notice = self.__note.pop(0)[1]
Sorry.
Wobei die ganzen doppelten Unterstriche bitte durch einfache ersetzt werden sollten.
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ahso oke verstehe, aber wenn ich jetzt

Code: Alles auswählen

print Pinboard.delete()
mache, dan bekomme ich None, ich wollte das aber der Wert aus der Liste notice zugewiesen wird und dann später nochmal ausgegeben.
So sieht es jetzt grade aus

Code: Alles auswählen

def delete(self):
        notice = self.__note.pop(0)[1]

Also mein Informatiklehrer einte wir sollen erst mal zwei Unterstriche machen. Kannst kurz sagen warum einer besser ist?
Haben wir mal wieder was gelernt :P
lunar

Zwei Unterstriche dienen zur Vermeidung von Namenskonflikten bei Mehrfachvererbung. Private Attribute werden mit einem Unterstrich markiert.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

lunar hat geschrieben:Zwei Unterstriche dienen zur Vermeidung von Namenskonflikten bei Mehrfachvererbung. Private Attribute werden mit einem Unterstrich markiert.
Nicht nur Mehrfachvererbung, bei Vererbung generell.

@cz3kit: Welches Buch hast du?
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ahso oke, danke euch beiden.

Ich hab das Buch:
Objektorientierte Programmierung mit Python von Michael Weigend
mitp Verlag
Haben wir mal wieder was gelernt :P
Antworten