ホームページ バックエンド開発 Python チュートリアル Lao Qi パート 4 から Python クラスの作成方法を学び、継承について説明します。

Lao Qi パート 4 から Python クラスの作成方法を学び、継承について説明します。

Jun 16, 2016 am 08:41 AM

前回の講義のコードをベースに、さらに修正を加えた次のプログラムになります。
を読んで勉強してください。

コードをコピー コードは次のとおりです:

#!/usr/bin/env python
#coding:utf-8

クラスの人:
Def __init__(自分、名前、電子メール):
self.name = 名前
self.email = メール

クラス プログラマー(人):
Def __init__(自分自身、名前、電子メール、言語、システム、ウェブサイト):
person.__init__(自分,名前,メールアドレス)
self.lang = lang
self.system = system
self.website = ウェブサイト

クラス Pythoner(プログラマ):
Def __init__(自分,名前,メールアドレス):
Programmer.__init__(self,name,email,"python","Ubuntu","qiwsir.github.io")

if __name__=="__main__":
Writer = Pythoner("qiwsir","qiwsir@gmail.com")
「name=,writer.name
」を印刷します 印刷 "lang=",writer.lang
「email=,writer.email
」を印刷します 「system=,writer.system
」を印刷します 「website=,writer.website

」を印刷します

#実行結果

名前= qiwsir
lang=python
メールアドレス= qiwsir@gmail.com
システム= Ubuntu
ウェブサイト= qiwsir.github.io

結果には非常に満足しています。プログラム内の継承関係を見てみましょう: Pythoner <-- Programmer <-- person 上記のプロセスから、継承によってコードの重複が削減されることがわかります。コードをより簡潔にします。また、継承時に関数内のパラメータにデフォルト値を割り当てることもできます。

継承の問題の調査を強調するために、実験には引き続き単純なクラスを使用します。

エクストラB

コードをコピー コードは次のとおりです:

#!/usr/bin/env python
#coding:utf-8

クラス A:
Def __init__(self):
print "aaa"

クラス B(A):
パス

if __name__=="__main__":
a = A()
b = B()

#実行結果

ああ
ああ

B は A を変更せずに継承するため、B は何も書く必要がないか、B は本質的に冗長です。実際のプログラミングプロセスでは、このようには記述されません。これは、読者に継承の意味を示すためです。

コードをコピー コードは次のとおりです:

##最初の継承は有効です

#!/usr/bin/env python
#coding:utf-8

クラス A:
Def __init__(self):
print "aaa"

クラス B:
Def __init__(self):
print "bbb"

クラス C1(A,B):
パス

クラス C2(B,A):
パス

if __name__=="__main__":
「A--->」を印刷します、
a = A()
「B--->」を印刷します、
b = B()
Print "C1(A,B)--->",
c1 = C1()
Print "C2(B,A)--->",
c2 = C2()

#実行結果

あ--->ああ
B---> bbb
C1(A,B)--->ああ
C2(B,A)--->bbb

クラス C1 は 2 つのクラス A と B を継承し、クラス C2 も 2 つのクラスを継承しますが、書き込み順序が少し異なることに気づきました (B, A)。実行結果から、サブクラスが複数の親クラスを継承する場合、最初のコンストラクター __init__() のみを継承でき、2 番目のコンストラクターは待機することがわかります。したがって、通常の状況では、プログラム内でコンストラクターの同時多重継承は行われませんが、以前のより現実的なコードと同様に、リレー継承は行うことができます。

他のメソッドの継承

コードをコピー コードは次のとおりです:

#!/usr/bin/env python
#coding:utf-8

クラス A:
Def __init__(self):
print "aaa"
定義メソッド(自分):
print "メソッド a"

クラス B(A):
Def __init__(self):
print "bbb"


if __name__=="__main__":
「A--->」を印刷
a = A()
a.amethod()
「B--->」を印刷
b = B()
b.amethod()

#実行結果

A--->
ああ
メソッド a
B--->
bbb
メソッド a

上記の状況を説明するために、私は絵を描きましたが、描き終わった後、この絵を見てさらに混乱したように見えました。どうしても描いてしまいましたが、理解の助けになれば幸いです。

A のインスタンスと呼び出しについては詳しく説明しません。 B に注目します。クラス B は A を継承します。同時に、B はコンストラクター内で独自の規定を作成しました。つまり、B のコンストラクターは B の希望に従って実行され、A の内容は実行されません。ただし、A には、 amethod(self ) メソッドの場合、B はこのメソッドを継承します。このメソッドがクラス B のインスタンスを通じて呼び出されると、成功します: b.amethod()

メソッドの継承と呼び出しです。

いわゆる継承とは、対応する継承オブジェクトを最下位から最上位に探し、見つかったらそれを継承することです。同じ名前のものがあった場合はどうなりますか?どのような順序で検索すればよいでしょうか?

アプリケーション Web サイトの一文:

Pythonでは多重継承が可能ですので、このとき、サブカテゴリから検索し、左から右に同じ階層の親カテゴリを検索するという順序に注意してください。同じレベルの上位の親カテゴリを左から右に検索し、最上位のレベルに到達します。

コード例:

コードをコピー コードは次のとおりです:

クラス A(オブジェクト):
定義メソッド1(自身):
print('A.method1')

def メソッド 2(self):
print('A.method2')

クラス B(A):
定義メソッド3(自分):
print('B.method3')

クラス C(A):
定義メソッド2(自身):
print('C.method2')

def メソッド 3(self):
print('C.method3')

クラス D(B, C):
定義メソッド4(自身):
print('C.method4')

d = D()
d.method4() # D、C.method4
で見つかりました d.method3() # D->B の順序で見つかりました、B.method3
d.method2() # D->B->C の順序で見つかり、C.method2
d.method1() # D->B->C->A の順序で見つかり、A.method1

必ず実際の学習者に各クラスの各メソッドを比較してもらい、対応する出力結果を順番に見つけてもらいます。継承の順序を理解するため。学習には少しずつの積み重ねが必要です。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles