diadia

興味があることをやってみる。独学で勉強しています。初心者から始めたので困ったことを書いて同じ境遇の方のヒントになればと思います。

特殊メソッドについて

 

特殊メソッドとは

特殊メソッドは、みんなのpythonによると

新しく作ったクラスに特殊メソッドを定義すると、インスタンスに対して演算子などを使った操作を行えるようになります。

と書いてある。あまりピンとこなかったが今回本当に小さいことだけれど分かったことがあるのでメモする。

djangoと特殊メソッドの関係

djangoではadminのページでデータオブジェクト(インスタンス)を見れるが、その表示はContent object(1),Content object(2)である。そしてこの表示を具体的なデータオブジェクトの表示へ変える事ができる。その際に使うのが、特殊メソッドの一つの__str__メソッドである。以下のように使うと今回の場合データオブジェクトの表示をタイトル表示に変えられる。

def __str__(self):
    return self.title

こういう事ができるのは学び始めて早い段階でわかったのだけれども、なぜmodels.pyでこのコードが書かれるのか分からず、記憶頼りにコーディングしていた。それについてのメモだ。特殊メソッドは、まずインスタンス(データオブジェクト)に対して使う。また新しく作ったクラスに特殊メソッドを定義する形で使う。
一方models.pyでは新たにクラスを作る。でもそのデータオブジェクトの表示は、adminページでContent object(1)のような表示になっている。データオブジェクトはインスタンスのことなので、特殊メソッドを使うとデータオブジェクトを操作することができる。その使い方は新たに作ったクラスに対して定義(def)する形で使う。__str__メソッドはデータオブジェクトの表示を変える操作である。そういうわけでクラスを新たに定義するmodels.pyにおいてクラス定義した中に特殊メソッドを定義して使う。これで記憶量をコンパクトにできる。

    class Content(models.Model):
        title = models.CharField(max_length=120)
        text  = models.TextField()
        date  = models.DatetimeField()
        
        def __str__(self):
            return self.title