sma hat geschrieben:
Das steht für
Links vom ":" ist der Schlüssel, rechts davon der Welt. Beides könnten beliebige Objekte sein, allerdings hat man - wie hier ja zu genüge erläuert - wenig Freude daran, wenn das Schlüsselobjekt veränderbar, aber nicht "hashable" ist. Und damit
Das macht es klarer, vielen Dank. Der Doppelpunkt hatte mich verwirrt. Nun habe ich mal eine andere Frage; Unter
http://www.tortall.net/mu/wiki/CairoTutorial gibt es ein Beispiel, dessen Code ich mal teilweise poste:
Code: Alles auswählen
#! /usr/bin/env python
import cairo
from math import pi, sqrt
class Diagram(object):
def __init__(self, filename, width, height):
self.surface = cairo.SVGSurface(filename + '.svg', width, height)
cr = self.cr = cairo.Context(self.surface)
cr.scale(width, height)
cr.set_line_width(0.01)
cr.rectangle(0, 0, 1, 1)
cr.set_source_rgb(1, 1, 1)
cr.fill()
** self.draw_dest(cr)
cr.set_line_width( max(cr.device_to_user_distance(2, 2)) )
cr.set_source_rgb(0, 0, 0)
cr.rectangle(0, 0, 1, 1)
cr.stroke()
self.surface.write_to_png(filename + '.png')
cr.show_page()
self.surface.finish()
class SetSourceRGBA(Diagram):
def draw_dest(self, cr):
cr.set_source_rgb(0, 0, 0) #rgba
cr.move_to(0, 0) #rgba
cr.line_to(1, 1) #rgba
.....
if __name__ == '__main__':
size = 120
SetSourceRGBA('setsourcergba', size, size)
Frage zur letzten Zeile: Wird hier die Klasse tatsächlich "nur" als Funktion aufgerufen (da keine Instanzierung stattfindet)? Wie aber kann man dann self benutzen?
Wird durch diesen Aufruf automatisch die __init__ Methode der Basisklasse (Diagram) aufgerufen (ich frage, weil ich meine mich zu erinnern, dass irgendwo gesagt wurde, dass das nicht so ist und man sich selbst darum kümmern muss, dass der Konstruktor der Basisklasse aufgerufen wird)?
Ist es nicht sehr unsauber, im Konstruktor der Basisklasse in der Zeile ** eine Methode der erbenden Klasse aufzurufen?
Bedeutet folgende Zeile im Kontruktor
dass self.cr eine Instanzvariable und cr eine Klassenvariable ist? Falls ja, hätte man in dem Fall cr nicht auf der (Einrück)-Ebene im Hauptblock (also auf der Ebene, wo auch __init__ deklariert wurde) deklarieren müssen?
Schönen Gruß