オブジェクト指向 Python に関する 6 つの質問
この記事は、Python を初めて使用する友人向けに書かれており、次の質問を明確にすることを目的としています:
- クラスとオブジェクトとは何ですか?
- 関数があるのに、なぜクラスは必要ですか?
- Python はパブリック/プロテクト/プライベートのプロパティ/メソッドをどのように定義しますか?プライベートは本当にプライベートですか?そうする目的は何ですか?
- クラス関数、メンバーを定義する方法関数と静的関数は何ですか? 関数とは何ですか?
- クラスは継承できますが、サブクラスを使用するには、親クラスの関数を使用する前に親クラスの関数を書き換える必要があります。そうしないと例外がスローされます。
- 次の継承関係があります: A、B (A)、C(A)、D(B,C) それでは、D が初期化されるとき、A、B、C の初期化順序はどうなるでしょうか。 A は 2 回初期化されますか?
1. クラスとオブジェクトとは何ですか?
最初にオブジェクトについて話しましょう。オブジェクトには通常 2 つの意味があります。オブジェクトは、次の場合に目標となるものを指します。行動や思考、あるいは特にあなたが恋をしている人に対して。プログラミングの世界では、オブジェクトとは、コンピューター ロジックの客観的な世界に存在する人、物、オブジェクト、その他のエンティティをマッピングしたものです。
プログラミングするとき、マッピングしたいものにオブジェクトをマッピングできます。ただし、マッピングがより一般的であれば、コードは使いやすく理解しやすくなり、その後の迅速な反復と実行にさらに役立ちます。拡大。 。 Python の世界では、すべてがオブジェクトです。
クラスについて話しましょう。クラスは分類されたクラスであり、類似のもののコレクションを表し、Python キーワード クラスに対応します。
オブジェクトはクラス内の特定のものであり、クラスの初期化後に生成されます。通常、オブジェクトまたはエンティティとも呼ばれます。たとえば、女性はクラスであり、あなたのガールフレンドはオブジェクトです。
属性: ガールフレンドの肌の色、民族、血液型など、オブジェクトの特定の静的特性。
機能: オブジェクトの特定の動的能力。たとえば、ガールフレンドは歌ったり、ピアノを弾いたりできます。
上記の例は適切ではないかもしれませんが、理解が深まると幸いです。実際、より正確な定義は次のとおりです:
クラスとはオブジェクトのグループです。同じ属性と機能を持つコレクション。
2. 関数があるのに、なぜクラスが必要なのでしょうか?
関数はコードの再利用を解決するためのものですが、関数はプロセス思考であり、具体的すぎます。物事の重複が多いため、問題を抽象化する必要もあります。クラスは一種の抽象概念です。抽象クラスは再利用可能であり、複雑なビジネス ロジックに対処しやすく、プログラマーのプログラミング メモリの負担も軽減します。
クラスがなければ、全体に影響を与えるようなコードを山ほど書いて、あえて変更する必要がなくなるでしょう。クラスを使用すると、読みやすく、保守しやすく、拡張可能なコードを簡単に作成できます。
3. Python はパブリック/プロテクト/プライベートのプロパティ/メソッドをどのように定義しますか? プライベートが本当にプライベートであるかどうか、そうする目的は何ですか?
Python は、以下の点で protected/private に同意します。フォーム属性/メソッド:
- __ はプライベートを意味します
- __ は保護を意味します
- 最初の 2 つを除いて、パブリックです
いわゆる合意、つまり、二重アンダースコアまたは単一アンダースコアで始まる変数やメソッドを見つけた場合、意識的にそれを変更したり、クラス外でアクセスしたりしないようにする必要があります。言い換えれば、Python はプログラマがその変数やメソッドにアクセスすることを妨げません。クラスのプライベート属性またはプライベート メソッド。Python は信頼できるプログラマを選択します。
パブリック プロパティへのアクセスと保護されたプロパティへのアクセスに違いはありません。プライベート プロパティにアクセスするには、これを行う必要があります:
object._ClassName__PrivateMember
4. クラス関数、メンバー関数、および静的関数を定義する方法関数とその関数は何ですか?
コメントを見てください:
class Document(): WELCOME_STR = 'Welcome! The context for this book is {}.' def __init__(self, title, author, context): print('__init__函数被调用') self.title = title self.author = author self.__context = context #类函数 @classmethod def create_empty_book(cls, title, author): return cls(title=title, author=author, context='nothing') # 成员函数 def get_context_length(self): return len(self.__context) # 静态函数 @staticmethod def get_welcome(context): return Document.WELCOME_STR.format(context) empty_book = Document.create_empty_book('What Every Man Thinks About Apart from Sex', 'Professor Sheridan Simove') print(empty_book.get_context_length()) print(empty_book.get_welcome('indeed nothing'))
クラス関数は @classmethod で修飾されています。最初のパラメーターは、クラス自体を表す cls である必要があります。つまり、classmethod 関数 cls() でクラス コンストラクターを呼び出すことができ、それによって新しいインスタンスが生成されます。この時点から、その使用シナリオを推測できます。
- コンストラクターを再度呼び出す必要があるとき、つまり、新しいインスタンス オブジェクトを作成するとき
- コンストラクターを変更する必要はありません。既存のインスタンスのケースは新しいインスタンスを返します。
メンバー関数は非常に一般的で、オブジェクトによって直接呼び出すことができるメソッドです。最初のパラメーターは self である必要があります。
@staticmethod で修飾された静的関数は、通常、この関数の計算にクラスの変数が関与せず、クラスをインスタンス化せずに使用できることを意味します。つまり、関数間の関係がつまり、staticmethod で修飾された関数はクラスの外でも定義できます。クラス内で staticmethod を使用するか、utils.py に別の関数を記述するかで時々悩むことがあります。
5. クラスは継承できます。サブクラスを使用するには、親クラスの関数を書き直す必要があるようにするにはどうすればよいですか。そうでないと例外がスローされますか?
2 つのメソッド、2 番目1つをお勧めします。
最初の型:
class A: def fun(self): raise Exception("not implement") class B(A): pass b = B() b.fun()
2 番目の型:
from abc import ABCMeta,abstractmethod class A(metaclass = ABCMeta): @abstractmethod def fun(self): pass class B(A): pass b = B() b.fun()
6. 次の継承関係があります: A、B(A)、C(A)、D(B ,C) D が初期化されるとき、A、B、C の初期化順序は何ですか? A は 2 回初期化されますか?
---> B--- A--->D ---> C---
A、B、および C の初期化順序は何ですか?同様にコードを書いて見てみましょう。
方法は 2 つあります。最初の方法では A が 2 回初期化されますが、2 番目の方法では初期化されません。
最初のタイプ:
class A: def __init__(self): print("A is called")class B(A): def __init__(self): print("B is called") A.__init__(self)class C(A): def __init__(self): print("C is called") A.__init__(self)class D(B,C): def __init__(self): print("D is called") B.__init__(self) C.__init__(self) d = D()
出力:
D is called B is called A is called C is called A is called
2 番目のタイプ:
class A: def __init__(self): print("enter A") print("levave A")class B(A): def __init__(self): print("enter B") super().__init__() print("levave B")class C(A): def __init__(self): print("enter C") super().__init__() print("levave C")class D(B,C): def __init__(self): print("enter D") super().__init__() print("levave D") d = D()
出力;
enter D enter B enter C enter A levave A levave C levave B levave D
第一种方法非常明确的表明了菱形继承潜在的问题:一个基类的初始化函数可能被调用两次。在一般的工程中,这显然不是我们所希望的。
正确的做法应该是使用 super 来召唤父类的构造函数,而且 python 使用一种叫做方法解析顺序的算法(具体实现算法叫做 C3),来保证一个类只会被初始化一次。
也就是说,能用 super,就用 super。
以上がオブジェクト指向 Python に関する 6 つの質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。
