ホームページ バックエンド開発 Python チュートリアル Lao Qi から Python の 3 つのサブクラスの書き方を学ぶ

Lao Qi から Python の 3 つのサブクラスの書き方を学ぶ

Jun 16, 2016 am 08:41 AM

クラスについては、読者の皆さんはすでに感じているはずです。以下のコードをよく読んで、何か問題がないか確認してください。

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

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

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

デフォルトの作成者(自分):
self.name

を返す

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

def Python(self):
pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]
pythoner_list を返す

if __name__=="__main__":

Writer = 人("qiwsir","中国語","qiwsir@gmail.com")
python = プログラマー("qiwsir","Python","qiwsir@gmail.com","Ubutun","qiwsir.github.io")
Print "私の名前は:%s"%writer.author()
Print "私はプログラムを作成します:%s"%python.pythoner()[1]

上記のコードは問題なく実行されますが、よく見ると 2 つのクラスがあり、1 つは person という名前で、もう 1 つは Programmer という名前のクラスです。これは問題ではありません。これら 2 つのクラスは、関数内に同じ場所があります: self.name=name、self.lang=lang、self.email=email。これは通常、コードの品質を追求するプログラマーには許可されません。重複したコードや冗長なコードを使用しないことが最善です。しかし、両方のクラスにこれらのパラメータが必要な場合はどうすればよいでしょうか?

サブクラス、親クラス、継承

以下のコードを見てください。クラス A と B の 2 つがあります。このプログラムは正しく実行でき、各クラスの機能は指定されたコンテンツのみを出力することです。


コードをコピー コードは次のとおりです:
#!/usr/bin/env python
#coding:utf-8
クラス A:

Def __init__(self):
print "aaa"

クラス B:

Def __init__(self):
print "bbb"
if __name__=="__main__":

a = A()

b = B()

#実行結果

ああ

bbb


上記の 2 つのクラスの間には、いわゆる親子関係はありません。ここで少し変更を加えてクラス B を書き直します。上記との違いに注意してください。


コードをコピー コードは次のとおりです:#!/usr/bin/env python #coding:utf-8

クラス A: Def __init__(self):

print "aaa"

class B(A): #上記のプログラムとは異なります。 B は A

を継承します Def __init__(self):

print "bbb"

if __name__=="__main__":

a = A()

b = B()

#実行結果

ああ

bbb


このプログラムでは、クラス B は前のプログラムとは少し異なります。クラス B(A): は次のように記述され、B と A の関係を示します。B は A のサブクラスであり、B は A から A を継承します。すべて(息子は父親から継承します)。

しかし、関係者が気づいても気づかなくても、実行結果は同じです。はい、それは、B が A を相続しますが、A からは何も呼び出さないことを意味します。これは、息子が父親から富を相続するのと同じですが、息子は一銭も動かないのです。外の世界では、相続が存在しないように見えます。


コードをコピー コードは次のとおりです: #!/usr/bin/env python
#coding:utf-8

クラス A: Def __init__(self):

print "aaa"

クラス B(A):

Def __init__(self):

#print "bbb"
A.__init__(self) #継承された親クラスを実行します

if __name__=="__main__":

a = A()

b = B()

#実行結果

ああ

ああ


今回は実行結果が変わりました。元々 b=B() はクラス B を実行していましたが、B は A を継承し、初期化コンストラクターに A のコンストラクターを導入したため、A を実行した結果が Result に対応します。

サブクラス継承を使用して最初のプログラムを書き直してみましょう。

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

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

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

デフォルトの作成者(自分):
self.name
を返す """
クラスプログラマー:
Def __init__(自分自身、名前、言語、電子メール、システム、ウェブサイト):
self.name = 名前
self.lang = lang
self.email = メール
self.system = system
self.website = ウェブサイト

def Python(self):
pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]
pythoner_list を返す """

クラス プログラマー(人): #親クラス 人を継承

Def __init__(自分自身、名前、言語、電子メール、システム、ウェブサイト):
Person.__init__(self,name,lang,email) #ここに Person.__init__() の関数を継承します
#Self.name = name #これら 3 つの文は person で記述されているため、
を繰り返す必要はありません #self.lang = lang #これら 3 つの文の機能は継承によって実現されています
#self.email = メール
self.system = システム self.website = ウェブサイト

def Python(self):

pythoner_list = [ self.name, self.lang, self.email, self.system, self.website ]

pythoner_list を返す
if __name__=="__main__":
Writer = 人("qiwsir","中国語","qiwsir@gmail.com")

python = プログラマー("qiwsir","Python","qiwsir@gmail.com","Ubutun","qiwsir.github.io")

Print "私の名前は:%s"%writer.author()
Print "私はプログラムを作成します:%s"%python.pythoner()[1]



コードを実行した結果は前と同じです。

サブクラス、親クラス、継承の特徴を理解していますか?父親が高級官僚や富豪であれば、あなたは二世官僚や二世の富豪となり、彼らから多くの富を相続することになるので、人生で頑張りすぎなければなりません。これが継承の役割です。コードでも同様に、継承によってコード作成者の疲労が軽減されます。

継承が使用される理由については、私の友人 @linghuchongdaxia が非常に素晴らしい説明をしてくれました:

コードをコピー

コードは次のとおりです: 技術的に言えば、OOP における継承の主な目的はポリモーフィズムを実現することです。ポリモーフィズムの場合、重要なのはインターフェイスの継承であり、プロパティと動作の継承があるかどうかですが、これは必ずしも当てはまるわけではありません。実際、エンジニアリングの実践では、大量の動作の継承が過度に複雑で肥大化したシステムにつながり、その結果柔軟性が低下することが示されています。そこで現在提唱されているのが、インターフェースをベースとした軽量継承の考え方です。このモデルでは、親クラス (インターフェイス クラス) にコードがまったくないため、コードの再利用はまったくありません。

Python では Duck Type の存在により、インターフェース定義の重要性が大幅に低下し、継承の役割がさらに弱められています。

さらに、論理的に言えば、継承の目的はコードを再利用することではなく、関係を整理することです。

私は上記の説明に完全に同意します。しかし、読者が理解できなくても、上記の説明の精神はプログラミングの実践を通じて理解する必要があります。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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時間しかない場合、何を教えることを選びますか...

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

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

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

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の使用について説明します。

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

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

See all articles