Classes are objects Before delving into metaclasses, a solid grasp of Python classes is beneficial. Python holds a particularly distinctive concept of classes, a notion it adopts from the Smalltalk language. In most languages, classes are descriptions of how to create an object. That is somewhat true in Python too: >>> class ObjectCreator(object): ... pass >>> my_object = ObjectCreator() >>> print
Notice: While JavaScript is not essential for this website, your interaction with the content will be limited. Please turn JavaScript on for the full experience. Unifying types and classes in Python 2.2 Python Version: 2.2 (For a newer version of this tutorial, see Python 2.2.3) Guido van Rossum This paper is an incomplete draft. I am soliciting feedback. If you find any problems, please write me
1. 初めに この文書の目的は、 Python で自前の class を作るとき、メソッドの第一引数がそのクラスのインスタンスそれ自身 (一般に self と書かれる) であることの理由を説明することです。 他の言語ではメソッドを定義するときに第一引数をインスタンスにするという方法は取り入れておらず、 this などの予約語を使ってインスタンスを表すのが一般的です。 Python だけが、独自の流儀をとっています。 しかし、このことを説明したサイトは見当たりませんでした。 どのサイトもそれは決まりごとだで済ませてしまっています。 しかし、それではどうも Python のクラスシステムを理解した気になれないので、Python でクラスシステムが どのように実装しているか推測しながら、例の self について説明したいと思います。 2. オブジェクト指向プログラミングの復習 オブジェクトとは、
Python3には、2系で作られたコードを3用に変換する案をパッチを生成する2to3というコマンドラインツールが付属してます(本体はlib2to3という標準モジュール群)。たとえば、エンコード引数つきのunicode関数でも、そのままエンコード引数が存在しないstr関数に変えるなど、変換も完璧ではないけれど、たいていのコードは3で動くようになります。 しかし、変換してしまうとそのコードは2系では動かなくなります。ということで、2系でも3でも両方で動くようなコードを書くのはどうすればいいか、を考えてみました。 両方で動くようにするには、ない機能を使うわけには行かないので、どうしても共通部分のみでかかざろうえません。なのでお勧めはできないのですけど、一応両方で動かす前提で書くことを考えてみました。 print 関数風にカッコつき呼び出しにする(ただしprintのみの一行で) print(obj
概要 結構 Python の「__new__」や「__init__」をコンストラクタと記述する人がいるが、厳密にはコンストラクタではない。 コンストラクタの定義 コンストラクタの定義は「Constructor (object-oriented programming) - Wikipedia, the free encyclopedia」や「コンストラクタ - Wikipedia」を見るのが良いかもしれない。 コンストラクタの定義は、厳密には以下だと思われる。 オブジェクトを生成する またオブジェクトの生成とは以下を示す。 allocation(メモリ割り当て) initialization(初期化) 「コンストラクタ」はオブジェクト生成のために呼ばれる物の事を指すので、全ての最初に呼ばれる物を指す。 「__new__」と「__init__」がコンストラクタでないことの証明 以下は「__
Stack Overflow for Teams is now called Stack Internal. Bring the best of human thought and AI automation together at your work. Try for free Learn more
C++ のクラスと Python のクラス C++ と Python の大きな違いは、前者がコンパイラ向け、 後者がインタプリタ向けの言語であるということ。あたりまえだけど。 C++ では「クラス」はあくまで、ヘッダファイルなどでの「定義」であって、 コンパイラにかけるときには、実際にその定義されたコードが実行される ことはない。これもあたりまえ。 一方、Python はインタプリタなので、「クラス」文はいきなり実行されている。 もうちょっと具体的に言うと、: 1: class foo(object): 2: def bar(self): 3: print 'Hello, world!!' 4: 5: x = foo() 6: x.bar() 上記のような Python のプログラムがあったとき、C++ の感覚だと、 5行目から実行されているような気がする。で、foo() で foo クラ
みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー Pythonのメタプログラミング手法の一つ「メタクラス」は,初心者にとっては「なんか強そう/経験値たくさんもらえそう」なアイテムの最右翼だと思う。反面「どうすればいいか/なにができるか」ということがなかなか理解しづらい。 英語のブログを見ていたら,メタクラスの理解に役立ちそうなちょうどよいサンプルを見つけたので,紹介がてら独自の解説を付け加えたいと思います。 メタクラスを簡単に説明すると,「本来コードを書かなければ実現できないような処理を黒魔術的な処理でなんとかしちゃう」ためのテクニックです。コード量を(時には劇的に)減らすことができたり,すっきりした見通しの良いクラス設計を実現できま
1. メソッドをクラスメソッドにするときは、デコレータを使う あるメソッドをクラスメソッドにするとき、 Python ではデコレータを使うことができる。 2.1 組み込み関数 によると、(太字は引用者による) classmethod( function) function のクラスメソッドを返します。 クラスメソッドは、インスタンスメソッドが暗黙の第一引数としてインスタンスをとるように、第一引数としてクラスをとります。クラスメソッドを宣言するには、以下の書きならわしを使います: class C: @classmethod def f(cls, arg1, arg2, ...): ... ふーむ、ここでも第一引数が必須で、それがクラスを参照するということか。Python のこういう書き方は、最初とっつきにくいと感じた。 (+_+) デコレータの書き方としては、関数の前に @classmeth
Without a doubt, you've seen a clock like this in demos of HTML5 Your browser does not support HTML5 ! However, right click and view the source of this page... It is not Javascript code! Intead, you will find Python code in a script of type "text/python" Brython is designed to replace Javascript as the scripting language for the Web. As such, it is a Python implementation (you can take it for a te
BrythonはJavaScriptの代わりにPythonを使ってプログラミングできるようにするライブラリです。 Webブラウザ標準で使えるプログラミング言語と言えばJavaScriptです。しかしそれだけでは満足できない、そんな方が開発したのがBrythonです。Webブラウザ上でPythonが書けてしまいます。 アナログ時計です。ちゃんと秒針が動いています。 コードは見事にPythonです。 Ajaxのデモ。 やはりちゃんとPythonコードです。 テーブルのソートデモ。 Importも使えて便利です。 左右にデータを移動させるデモ。 ボタンやコンポーネントをPythonの中で生成しています。 3Dを動くデモ。 エリア情報を含めてPythonで定義されています。 BrythonはHTMLコンテンツのハンドリングはもちろん、Ajax、ローカルストレージ、Canvasの操作もできます。HT
134:実行しているスクリプトのパスを求める __file__ を用いると「スクリプトへの相対パス」を取得できます。 Python 2.3 以前では __file__ が使えないので sys.argv[0]? で代用します。 Python インタプリタへの最初の引数、すなわち「スクリプトへの相対パス」となります。 「スクリプトのあるディレクトリの相対パス」を得るには「スクリプトへのパス」を引数にして os.dirname 関数を呼びます。 「スクリプトと同じディレクトリのファイルへの相対パス」を得るには「スクリプトのあるディレクトリのパス」と「ファイル名」を os.path.join 関数であわせます。 「スクリプト名」だけを得たければ os.basename(__file__) を用います。各「絶対パス」が必要であれば各「相対パス」を引数に os.path.abspath を呼びます。
さて、今日は何かと忌み嫌われがちな「Pythonのimport文」についての記事を書きたいと思います。 その中でも特に、「今編集しているスクリプトより上層のディレクトリにあるモジュールをimportしたくなった」時にハマるケースについて取り上げます。 今、次のようなファイル構成でPythonのアプリケーション(モジュール)を書いていたとします。 my_module/A/A.pyを編集中, B/B.pyの機能が使いたくなったとします。 Pythonでは, from ... import ...の構文でimportを行う場合に 相対パスを指定する事ができるので、 my_module/B/__init__.pyに import Bと書いておき、 from ..B import B と書く事でmy_module/B/B.pyをインポートすることにします。 ところが、ここで動作確認をしようとして、
Python に Bオプションを付けるか、環境変数 PYTHONDONTWRITEBYTECODE を作ると .pycファイルが作成されなくなる。 具体的には python -B foo.py のように実行するか、 :: Windows cmd の場合 set PYTHONDONTWRITEBYTECODE=1 foo.py # Linux bash の場合 export PYTHONDONTWRITEBYTECODE=1 ./foo.py のように事前に環境変数を設定しておく。 そもそも .pyc ファイルとは? Python で書かれたモジュールを import すると自動的に .pycファイルが作成される。 例えば import bar とやると bar.py と同じディレクトリに bar.pyc というファイルができる。 このファイルは bar.py をコンパイルして得られたバイト
‐ programming, open source, os, and a handful of tips Pythonのwith構文がいまいち掴めなかったので、ざっとまとめてみた(いまさらながら)。ドキュメントはPython リファレンスマニュアルの7.5 with 文にある。 withを使ったコード例は、下記のような感じ。 c = ClassHogeHoge() with c: c.foobar() 上記のコードは、下記と等価となる。 c = ClassHogeHoge() c.__enter__() c.foobar() c.__exit__() つまり、withに続くインデントブロックを実行する前に指定したオブジェクトの「__enter__()」メソッドを呼び出し、実行後に「__exit__()」メソッドが暗に呼び出される、という仕組み。 __enter__()と__exit__(
Welcome! This is the documentation for Python 2.7.18. Parts of the documentation: What's new in Python 2.7? or all "What's new" documents since 2.0 Tutorial start here Library Reference keep this under your pillow Language Reference describes syntax and language elements Python Setup and Usage how to use Python on different platforms Python HOWTOs in-depth documents on specific topics Installing P
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く