-------------------------------------------- (Pythonの基本的な文法を取る2 ) --------------------------------------------
七、オブジェクト指向プログラミング
Pythonのサポートオブジェクト指向プログラミング;クラスおよびオブジェクトは、オブジェクト指向プログラミングの二つの主要な側面で、クラスは、オブジェクトの新しいタイプは、このクラスのインスタンスで作成します。
共通変数のオブジェクトが呼び出されるオブジェクトまたはクラス変数に属するオブジェクトに属するデータを記憶することができるドメイン、オブジェクトを使用することができるような機能がクラスメソッドと呼ばれ、機能のクラスに属し、フィールドおよびメソッドをまとめてクラスと呼ぶことができますプロパティ。
彼らは、インスタンス変数とクラス変数と呼ばれ、インスタンスに属する、またはクラス自体に属している - そこフィールドの2種類があります。
クラスキーワードクラスを作成するには、クラスのフィールドやメソッドは、インデントブロック内に記載されています。
クラスのメソッドは、余分な最初の引数を持っている必要がありますが、あなたは、この特定の変数を呼び出すときに、このパラメータに割り当てられていない、それはの名前です。いつものように、オブジェクトそのものを指し、自己、この内のC#と同様に、。
クラスの動物: #emptyブロックを渡します
メソッドは、オブジェクトクラスと呼ばれ__init__方法が作成され、C ++コンストラクタはに対応します。
C ++で等価デストラクタ; __del__メソッドは、オブジェクトクラスが破棄されるメソッドを呼び出します。オブジェクトを削除するには、デルを使用している場合は、__del__メソッドを呼び出します。
Pythonの(データメンバを含む)すべてのクラスのメンバーは、公開されている。唯一の例外、データメンバあなたはプライベート変数のために、接頭辞として二重のアンダースコアを使用している場合。
复制代码 クラスPerson: カウント= 0 デフ__init __(自己、名前、年齢): Person.Count + = 1 self.name =名前の 自己.__年齢=年齢の P =人( "ピーター"、25) 、P1 =人(「ジョン」、20) 印刷Person.Count#2 印刷p.name #peter プリントP .__年齢#AttributeError:Personインスタンスには属性'__age'を持っていない 复制代码
継承:継承を使用するために、タプルとして基本クラスの名前は、クラス名の後に続く、Pythonのサポート多重継承。ここでは、継承の例です。
复制代码 1クラスSchoolMember: 2 '任意の学校のメンバーを表します。' '' '' 3デフ__init __(自己、名前、年齢): 4 self.name =名前 5 self.age =年齢 "学校のメンバーの初期化"を6印刷 7 8デフ伝える(自己): 9 '' '私の詳細を知らせる' '' 10印刷"名:%sは、年齢:%sを、" %(self.name、self.age)、 11 12クラスの先生(SchoolMember) : 13 'は先生を表します。' '' '' 14デフ__init __(自己、名前、年齢、給与): 15 SchoolMember .__のinit __(自己、氏名、年齢) 16 self.salary =給与 17印刷」 20 SchoolMember.tell(自己) 21印刷"給与:%D" %のself.salary 22 23クラスの学生(SchoolMember): 24 '' '学生を表します。' '' 25デフ__init __(自己、名前、年齢、マーク) : 26 SchoolMember .__のinit __(自己、名前、年齢) 27 self.marks =マーク "学生の初期化" 28印刷 29 30デフ(自己)言う: 31 SchoolMember.tell(自己) 32プリント"マーク:%D" %の自己.marks 33 doc__内の例題34印刷SchoolMember .__ doc__内の例題.__ 35印刷教師 doc__内の例題.__ 36プリント学生 37 38トン=教師( "ミスターリー"、30、9000)。 、学生( "ピーター"、25 = 39秒90) 40人の 41メンバー= [T、S] 42 メンバーにおけるM 43: 44 m.tell() 复制代码
次のようにプログラムの出力は次のようになります。
复制代码 任意の学校のメンバーを表します。 先生を表します。 学生を表します。 学校のメンバーを初期化します。 教師初期 の学校のメンバーを初期化します。 学生の初期化 李、年齢:30、給与:9000名 名前:ピーター、年齢:25、マークス:90 复制を代码
8つの入力/出力
プログラムはコンソールやファイルなど、ユーザの入力/出力、との相互作用を必要とし、コンソールおよび印刷raw_inputのために使用することができる、strのクラスを使用することもできます。raw_input(XXX)XXX入力し、ユーザの入力とリターンを読み込みます。
1.ファイルの入力/出力
クラスファイルは、読み込みファイルを使用して、ファイルを開くのreadlineを書いて、適切にファイルを読み書きするために使用することができます。ファイルを開くために使用するモードに応じて、ファイルの読み書き能力、コモンモード
モード(「R」)、書き込みモード(「W」)をそこに読んで、(「A」)モードを追加するには、ファイル操作の後にファイルを閉じるにはcloseメソッドを呼び出す必要があります。
复制代码 \ 1テスト= '' ' 2これは、ファイルI / Oについてのプログラムです。 3 4著者:ピーターZhange 5日:2011年12月25日 6「」」 7 ファイルがない場合は8 fは=ファイル( 『test.txtの』、 『W』)書き込み用にオープン#、ファイルが作成されます。存在する ファイルへの9 f.write(テスト)#ライトテキスト 10 f.close()#ファイルを閉じる 11 ないモードが指定されていない場合、デフォルトモードが読み取り専用である12 F =ファイル(「test.txtの」)位。 13 14ながらTRUE: 15行= f.readline() 16 lenを(ライン)== 0の場合:#ゼロ長が示すファイルのEOF 17休憩 18印字ライン、 19 20 f.close() 复制代码
2.メモリ
Pythonはピクルスになって、標準モジュールを提供し、それは完全に後に取り出すことができ、これは持続的に格納されたオブジェクトと呼ばれ、ファイル内の任意のPythonオブジェクトを使用して格納されていてもよい;はcPickleなり、その機能が別のモジュールであり、そしてピクルス速い漬物速度よりも、それはCで書かれている以外は、まったく同じ(約1,000倍高速)。
复制代码 インポートはcPickleの データファイル= "data.data" NAMELIST = [ "ピーター"、 "ジョン"、 "王"] F =ファイル(データファイル、 "W") cPickle.dump(ネームリスト、F) f.close() デル名前リスト F =ファイル(データ・ファイルの) storednamelist = cPickle.load(f)は 、印刷storednamelistの #1 [ 'ピーター'、 'ジョン'、 '王'] 复制代码
ナイン、異常
いくつかの異常がプログラムで発生した場合、例外が発生します。Pythonは、処理を除いて...試すことができます。
コードをコピーして 試して: 1/0印刷 :ZeroDivisionError、E以外 の印刷E :を除いて 印刷する「例外エラーが発生したか」。 モジュロZEROかによって#integer課 重複コード
それは何の異常が他の実行されていない場合、他のリンクを除いて...試すことができます。
私たちは、独自の例外クラスは、エラーまたは例外を継承する必要が定義することができます。
复制代码 クラスShortInputException(例外): '' ''は、ユーザ定義の例外クラスを' DEF __init __(自己、長さ、少なくとも): 例外.__ INIT __(自己) self.length =長 self.atleast =少なくとも 試みる: S = raw_input( "コピーいろいろ書い入力してください- >")を lenの場合(S)<3: ShortInputException(LEN(S)、3)調達 例外EOFError除く: プリント"なぜ入力EOFの?" ShortInputException除き、例: プリント%(ex.length、ex.atleast)「の入力のな長さは%dです、少なくとも%dで期待していた」 :他に 印刷「も例外」 、入力の#この用な長さが1ではありません
最後に...してみてください
复制代码 してみてください: =ファイル( "test.txtの")fは しばらく真: ライン= f.readline() lenの場合(ライン)== 0: ブレーク time.sleep(2) 印刷行、 最終的には: f.close() 「クリーンアップ...」印刷 复制代码