タグ

classとオブジェクト指向に関するtomio2480のブックマーク (5)

  • Pythonのクラス変数とインスタンス変数の違い - logging.info(self)

    動機 Pythonの言語リファレンスとか他の人のコードみてたらクラス変数とインスタンス変数の違いがよくわからなくなったのでメモ。 というか、http://d.hatena.ne.jp/Ponsuke/20090128/1233115400にインスパイアされて書きました。 今まで 自分が最初に触ったオブジェクト指向言語はJavaで、そっちの概念を引きずったままPythonをやり始めたので当然クラス変数とインスタンス変数は別々に宣言するものなんだろという考えていた。 つまり class Hoge(object): FOO = int() とすればクラス変数FOOが宣言されたことになりインスタンス変数は宣言されてないものだと思ってた。 そしてPythonでインスタンス変数を使うには class Hoge(object): def __init__(self): self.FOO = int()

    Pythonのクラス変数とインスタンス変数の違い - logging.info(self)
  • インスタンスメソッド・クラスメソッド・スタティックメソッド - PASL

    Pythonで扱われるこれらのメソッドの違いを調べてみた。結論から言うと、これらのメッソドの違いは「インスタンス変数にアクセス可能か」、「継承時に親・子クラスのどちらのクラス変数を参照するか」の2つの観点で異なる。 メソッド インスタンス変数へのアクセス どちらのクラス変数を参照するか インスタンスメソッド 可 親 クラスメソッド 不可 子 スタティックメソッド 不可 親 ここで注意したいのは「親クラス」のクラス変数を変更すると「必ず」子クラスのクラス変数が変更されるということ。また当然のこととして、子クラスのインスタンス変数変更が親クラスのインスタンス変数を変更したりはしない。 具体例をつくってみた。method_example.pyというファイル名で保存。 class Boku(object): # これはクラス変数 subject = "ぼくは" name = "ドラえもん" def

    インスタンスメソッド・クラスメソッド・スタティックメソッド - PASL
  • Python のクラスメソッド – デコレータ @classmethod, @staticmethod を使って

    1. メソッドをクラスメソッドにするときは、デコレータを使う あるメソッドをクラスメソッドにするとき、 Python ではデコレータを使うことができる。 2.1 組み込み関数 によると、(太字は引用者による) classmethod( function) function のクラスメソッドを返します。 クラスメソッドは、インスタンスメソッドが暗黙の第一引数としてインスタンスをとるように、第一引数としてクラスをとります。クラスメソッドを宣言するには、以下の書きならわしを使います: class C: @classmethod def f(cls, arg1, arg2, ...): ... ふーむ、ここでも第一引数が必須で、それがクラスを参照するということか。Python のこういう書き方は、最初とっつきにくいと感じた。 (+_+) デコレータの書き方としては、関数の前に @classmeth

    Python のクラスメソッド – デコレータ @classmethod, @staticmethod を使って
  • newを封印して、JavaScriptでオブジェクト指向する(2)

    前回の続きです。サンプルコードは前回から続いていると思ってください。 privateは諦めましょう 親のメソッドを呼ぶ コンストラクタ instanceofに対応する ダックタイピングのススメ 今回もobject関数を使うので再掲載。 /* * object - オブジェクトを作る * Object object(BaseObj [, mixinObj1 [, mixinObj2...]]) */ function object(o) { var f = object.f, i, len, n, prop; f.prototype = o; n = new f; for (i=1, len=arguments.length; i<len; ++i) for (prop in arguments[i]) n[prop] = arguments[i][prop]; return n; } ob

    newを封印して、JavaScriptでオブジェクト指向する(2)
  • newを封印して、JavaScriptでオブジェクト指向する(1)

    以下はプロトタイプ的継承だけで一通りの機能を実現できる、という一つの例です。もちろん他にも書き方はありますし、newを使うのがよくないと主張しているわけではないです。 (誤解を生みそうな文体が混じっているようなので追記: 2011/5/14) 春ですし、少し初心者向けの記事を書きます。タイトル通り、JavaScriptのオブジェクト指向について。ちょっと長くなるので目次です。 クラス(に相当するオブジェクト)を作る オブジェクトからオブジェクトを作る(インスタンス化) 単一継承 多重継承 privateは諦めましょう 親のメソッドを呼ぶ コンストラクタ instanceofに対応する ダックタイピングのススメ JavaScript標準のオブジェクト指向といえばnewやらprototypeやらを書く必要がありますが、これらは書くのが面倒臭い上に気をつけないといけない点がたくさんあります。Ja

    newを封印して、JavaScriptでオブジェクト指向する(1)
  • 1