タグ

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

  • 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 を使って
  • 第202話 インスタンス変数とクラス変数の違い

    青森の全国高校文化祭に写真部門で参加したこうしろうは,恐山や三内丸山遺跡を撮りまくって帰ってきた。その後も高校生対象の写真教室に写真部の仲間と一緒にまめに参加している。富山県の五箇山から岐阜県白川郷へと続く合掌集落で開催された一泊二日の写真教室にも参加した。 富山県人には割りと身近な世界遺産を写した一枚である。晴れ間が出てきたのか靄が心地よい。夏場も良いが冬の雪深い合掌集落の写真を見ると,生活の大変さと人間のたくましさを思い知らされる。真冬にあそこに写真を撮りに行った写真家にも感心する。 カメラの腕前が上がったのかどうかはわからないが,撮影時のセッティングと構図にはうるさくなった。旧式のレーザープリンタみたいなもので1枚目が出てくるまでに暇が掛かるのだ。 コンピュータよりもカメラ好きになったのか,Eclipseを使ったJavaの勉強はなかなか進みが遅い。Javaのオブジェクト指向をざっと学

    第202話 インスタンス変数とクラス変数の違い
  • Pythonにおけるクラスの静的メンバについて - 試験運用中なLinux備忘録・旧記事

    はじめに 以前「オブジェクト指向についての覚え書きとPython上のクラスと組み込みオブジェクトについて」という記事も書いている通り、オブジェクト指向やその中のクラス設計などについてはまだよく分かっていない部分がかなり多く、記事においても誤りが含まれている可能性はある。 そのような中でクラスの「静的メンバ」というものについて幾つか分かったことがあるので、例とともにここにまとめておくことにする。 概要 静的メンバ変数(静的属性/静的attribute) クラスの中にあるメンバ変数は、多くの場合 class ClassName: [以下メンバの定義...] のようにして定義したクラスに対して obj = ClassName() のようにして生成した各オブジェクト(インスタンス)に属するデータ*1を持っていることになる。しかし、Python以外の幾つかの言語では「static」を付けてメンバ変

    Pythonにおけるクラスの静的メンバについて - 試験運用中なLinux備忘録・旧記事
  • 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