Kein Konstruktor was ist des den?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

Hallo miteinander
der code hier

Code: Alles auswählen

class Poll(models.Model):
    #----------------------------------------------------------------------
    #def __init__(self, question, pub_date):            
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    
    #----------------------------------------------------------------------
    def __unicode__(self):
        return self.question
    
    def was_published_today(self):
        return self.pub_date.date() == datetime.date.today()
Die Klasse besitzt kein Konstruktor, beim Object instanzieren muss ich für question und pub_date trotzdem zwei Parameter mitgeben. Diese zwei muss doch ein Konstruktur sein oder nicht?

Gruss kostonstyle
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

kostonstyle hat geschrieben: Die Klasse besitzt kein Konstruktor, beim Object instanzieren muss ich für question und pub_date trotzdem zwei Parameter mitgeben. Diese zwei muss doch ein Konstruktur sein oder nicht?
Der ORM von Django erzeugt den Konstruktor automatisch ;)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

ice2k3 hat geschrieben:Der ORM von Django erzeugt den Konstruktor automatisch ;)
Sagen wir mal der Konstuktor nimmt Keyword Argumente an, die die gleichen Namen wie die Field Attribute haben.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

kostonstyle hat geschrieben:Die Klasse besitzt kein Konstruktor, beim Object instanzieren muss ich für question und pub_date trotzdem zwei Parameter mitgeben. Diese zwei muss doch ein Konstruktur sein oder nicht?
Auch wenn dein letzter Satz von der Formulierung her sinnfrei ist glaube ich doch, dass ich dein Problem verstanden habe.

Code: Alles auswählen

    class X(object):
        def __init__(self, *args, **kwargs):
            print(args)
            print(kwargs)
                
    class Y(X):
        pass
        
    test = Y("foo", a="bar", b="baz")
Klasse Y hat hier auch keinen offensichtlichen Konstruktor. Die Basisklasse nimmt aber die Daten entgegen und das auch noch völlig flexibel.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

kostonstyle, der die Field-Klasse aus Django's ORM nimmt Keyword-Argumente an (für jedes Feld den entsprechenden). Du musst die aber nicht angeben.

Mal angenommen du hast zwei Felder `foo` und `bar`, beide benötigt (`blank=False`). Dann wäre

Code: Alles auswählen

blah = Blah(foo=bizz, bar=buzz)
blah.save()
genauso gültig wie

Code: Alles auswählen

blah = Blah()
blah.foo = bizz
blah.bar = buzz
blah.save()
Gruß
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

vielen vielen dank, leute.
Antworten