Seite 1 von 1

Kein Konstruktor was ist des den?

Verfasst: Sonntag 22. November 2009, 15:41
von kostonstyle
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

Re: Kein Konstruktor was ist des den?

Verfasst: Sonntag 22. November 2009, 15:46
von ms4py
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 ;)

Re: Kein Konstruktor was ist des den?

Verfasst: Sonntag 22. November 2009, 15:47
von DasIch
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.

Re: Kein Konstruktor was ist des den?

Verfasst: Sonntag 22. November 2009, 16:08
von /me
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.

Verfasst: Sonntag 22. November 2009, 19:22
von Dauerbaustelle
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ß

Verfasst: Freitag 4. Dezember 2009, 09:01
von kostonstyle
vielen vielen dank, leute.