Vielleicht hast du gerade einen KDE-Entwickler enttarntLeonidas hat geschrieben:Was soll das soll das ``k`` vor den Namen?

Code: Alles auswählen
IMkeller = Kellerspeicher(alphabet=[1,2,3,4])
Ja, aber welchen Sinn haben die ``k``? Es ist schon klar, dass ``alphabet`` zu ``Kellerspeicher`` gehört, es ist ja ein Attribut der Klasse.jonas hat geschrieben:Das `k` vor den Namen steht für "Keller-"
Ich wäre dir verbunden wenn du den Hinweis auf
die Namespaces nochmal in diesem Zusammenhang
erläutern könntest, kapier ich nämlich nicht
Code: Alles auswählen
kellerspeicher = Kellerspeicher(['a'])
print kellerspeicher.kalphabet
Code: Alles auswählen
print kellerspeicher.alphabet
Code: Alles auswählen
print kellerspeicher.kalphabet
Code: Alles auswählen
In [87]: def foo(bar=[]):
....: return bar
....:
In [88]: a = foo()
In [89]: a.append('spam')
In [90]: foo()
Out[90]: ['spam']
Nein, ich meine die Funktionssignatur von ``__init__``.jonas hat geschrieben:Aber das mit mutable object versteh ich noch nicht so ganz...
Meinst du meine Forensignatur?
Code: Alles auswählen
>>> class K(object):
... def __init__(self, args=[]):
... args.append(7)
... self.args = args
...
>>> k1 = K([1, 2, 3])
>>> k2 = K()
>>> k1.args
[1, 2, 3, 7]
>>> k2.args
[7]
>>> k3 = K()
>>> k3.args
[7, 7]
Code: Alles auswählen
def irgendeinefunktion ():
try:
## tuEtwas...
except :
print """Hallo es gab irgendeinen Error aber
machen Sie sich mal keine Sorgen..."""
Ist so eine spezialisierte Klasse z.B. Frog <=> Tkinter ?str1442 hat geschrieben:[...]Beispielsweise ist ein solcher Einsatz denkbar wenn du eine Klasse erstellst, die eine API implementiert (add_thing, remove_thing, do_somethign_important ...), und dann eine spezialisiertere Klasse erstellst, die von dieser abgeleitet ist.[...]
Code: Alles auswählen
class AbstractCls(object):
def add(self):
pass
def request(self):
pass
class Cls(AbstractCls):
def add(self):
# Wichtiger Code
def _do_sth_for_add(self):
# Mach irgendwas und nutze Instanzvariablen dazu.
Ja, natürlich, aber funktionen die implementiert werden sollten, sollten Ausnahmen werfen. Sonst kann man sie auch einfach nicht implementieren und sich wundern warum dann an seltsamen Stellen ``None`` auftaucht. Ich finde es ähnlich wie du auch wenig sinnvoll wenn man in Interfaces nicht auch teile der Implementation haben kann. In Scalas Traits ist das anders, dort kann man in den Traits schon eine Implementation haben aber wenn man abstrakte Methoden des Traits nicht implementiert, wird es nicht kompilieren. Sowas kann man eben mit normalen Klassen und NotImplementedError auch haben; allerdings zur Laufzeit.str1442 hat geschrieben:Die einzelnen Methoden müssen ja nicht einfach durchgehen. In Java ist das afaik ja zwingend, das man eine interface Methode nicht weiter spezifieren kann. Aber wenn 5 verschiedene Parser beispielsweise sowieso immer ~3 Methoden haben, die komplett gleich sind, unterscheidet sich das nicht vom normalen Einsatzzweck von Vererbung.
Wieso? Statt ``None`` wird man dann ``NotImplemented`` im Programm umherfliegen haben und man darf dann den Debugger anwerfen um festzustellen welche Funktion nicht implementiert wurde. Da finde ich Ausnahmen wesentlich besser, weil eben der letzte Frame im Traceback der Funktion entspricht, die man überschreiben muss.str1442 hat geschrieben:Statt dem NotImplementedError gibts auch das NotImplemented Singleton. Wäre wohl besser, das zurückzugeben.
Wie gesagt, ich meine nur irgendwo mal was diesbezüglich gelesen zu haben. Ansonsten ist eine Ausnahme wohl besser geeignet, ja. Welchen Zweck hat aber NotImplemented, wenn man es sowieso nie zurückgeben sollte? Gibt ja dann eigentlich keinen Einsatzzweck mehr dafür.Wieso? Statt ``None`` wird man dann ``NotImplemented`` im Programm umherfliegen haben und man darf dann den Debugger anwerfen um festzustellen welche Funktion nicht implementiert wurde. Da finde ich Ausnahmen wesentlich besser, weil eben der letzte Frame im Traceback der Funktion entspricht, die man überschreiben muss.