技術共有

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: クラスとオブジェクトの 14 の Python 実装 - クラスの静的メソッドとクラス メソッドの違いがわかりますか?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: クラスとオブジェクトの 14 の Python 実装 - クラスの静的メソッドとクラス メソッドの違いがわかりますか?

まとめ:

この記事では、Pythonのクラスやオブジェクトにおけるクラスメソッドと静的メソッドを中心に、クラスメソッドと静的メソッドの定義、特徴、適用シナリオ、使用方法を紹介し、両者を比較します。

元のリンク:

フリークスタジオのブログ

過去におすすめしたもの:

おそらくインターネットを始めるのに最も適したオブジェクト指向プログラミング チュートリアル: Python 実装 - 組み込み愛好家必見!

オブジェクト指向プログラミングを始めるのに最適なインターネット上のチュートリアル: 00 オブジェクト指向設計手法の概要

オブジェクト指向プログラミングの入門に最適なインターネット上のチュートリアル: 01 オブジェクト指向プログラミングの基本概念

オブジェクト指向プログラミングの入門に最適なインターネット上のチュートリアル: 02 クラスとオブジェクトの Python 実装 - Python を使用したクラスの作成

インターネットを始めるのに最適なオブジェクト指向プログラミング チュートリアル: 03 クラスとオブジェクトの Python 実装 - カスタム クラスへの属性の追加

インターネットを始めるのに最適なオブジェクト指向プログラミング チュートリアル: 04 クラスとオブジェクトの Python 実装 - カスタム クラスへのメソッドの追加

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: 05 クラスとオブジェクトの Python 実装 - PyCharm コード タグ

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: 06 クラスとオブジェクトの Python 実装 - カスタム クラスのデータ カプセル化

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: 07 クラスとオブジェクトの Python 実装 - 型アノテーション

インターネット上にあるオブジェクト指向プログラミングの入門に最適なチュートリアル: 08 クラスとオブジェクトの Python 実装 - @propertydecorator

インターネット上で初心者に最適なオブジェクト指向プログラミングチュートリアル: 09 クラスとオブジェクトの Python 実装 - クラス間の関係

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: クラスとオブジェクトの 10 の Python 実装 - クラスの継承とリスコフ置換原理

インターネットで始めるのに最適なオブジェクト指向プログラミングのチュートリアル: 11 のクラスとオブジェクトの Python 実装 - 親クラスのメソッドを呼び出すサブクラス

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: 12 のクラスとオブジェクトの Python 実装 - Python はログ モジュールを使用してプログラム実行ログを出力します

インターネット上の初心者に最適なオブジェクト指向プログラミング チュートリアル: 13 のクラスとオブジェクトの Python 実装 - ビジュアル コード読み取りアーティファクトのインストールと使用 Sourcetrail

さらにエキサイティングなコンテンツをご覧ください:

CM3 デバッグ システムの簡単な分析

半月の作業を経て、組み込み技術スタックの概要がリリースされる

競技会で優勝する武道の秘訣:05. 電子計算機競技会における国内入賞チームの仕事と学習内容の分担方法

競技会で優勝する武道の秘密: 04 電子競技会での組み込み開発のための必読のクイックガイド

競技会で優勝する武道の秘密: 03 優れた創造的な選択 – 全国賞を受賞するための最も必要な前提条件

競技会で優勝した武道の秘密: 02 全国賞の秘密 - 大学生のコンピューター競技会の簡単な立ち上げプロセス、初心者必読

競技会で勝利する武道の秘密: 01 現代の大学競技会における「ローリング」、「先祖伝来の出来事」、「つながり探し」の現象をどのように見ていますか?

競技で勝つ武道の秘密:00 工学系大学生にとって避けて通れないテーマ、あなたはどれくらい知っていますか?

電子コンペティションとコンピュータコンペティションの「武術の極意」 - 電子コンペティション、オプトエレクトロニクス設計コンペティション、コンピュータ設計コンペティション、組み込みチップおよびシステム設計コンペティション、必要なものがすべてここにあります。

ドキュメントとコードの取得:

次のリンクにアクセスしてドキュメントをダウンロードできます。

https://github.com/leezisheng/Doc

画像

このドキュメントでは主に、オブジェクト指向プログラミングに Python を使用する方法を紹介しており、読者は Python 構文とマイクロコントローラー開発の基本を理解している必要があります。 Python オブジェクト指向プログラミングを説明する他のブログや書籍と比較して、このドキュメントはより詳細であり、上位コンピューターの一般的なシリアル ポート データ送受信、データ処理、動的グラフ描画などを使用する組み込みホスト コンピューター アプリケーションに焦点を当てています。および下のコンピューターをアプリケーション例として使用し、読者の理解を容易にするために、Sourcetrail コード ソフトウェアを使用してコードを視覚的に読み取ります。

関連するサンプル コードのリンクは次のとおりです。https://github.com/leezisheng/Python-OOP-デモ

文章

静的メソッド

SensorClass クラスを例にとると、クラス内で定義されているいわゆる InitSensor、StartSensor、StopSensor などのメソッドは次のとおりです。オブジェクトメソッドつまり、これらのメソッドはすべてオブジェクトに送信されるメッセージであり、すべてオブジェクト内のプロパティを呼び出します。実際、クラスに記述するメソッドはオブジェクト メソッドである必要はありません。たとえば、InitSensor メソッドでは、オブジェクト属性を呼び出す必要がないメソッドがいくつかあります。 COM ポートが存在することは明らかに、このメソッドは Sensor オブジェクトとは異なります。

別の例として、「Triangle」クラスを定義し、3 つの辺の長さを渡して三角形を構築し、周囲長と面積を計算するメソッドを提供します。ただし、渡された 3 つの辺の長さでは三角形オブジェクトを構築できない場合があります。まず、3 つの辺の長さが三角形を形成できるかどうかを検証するメソッドを作成します。このメソッドが呼び出されたときに三角形オブジェクトが作成されていないため (3 つの辺の長さが三角形を形成できるかどうかが不明であるため)、このメソッドは明らかにオブジェクト メソッドではありません。三角形を形成する)、したがって、このメソッドは Triangle クラスですが、Triangle オブジェクトではありません。私たちは使うことができます静的メソッドこの種の問題を解決するためのコードは次のとおりです。

@staticmethod
    _# 判断传感器ID号是否正确:这里判断ID号是否在0到99之间_
    def IsTrueID(id:int = 0):
        if id >= 0 and id <= 99:
            return True
        else:
            return False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

静的メソッドは、実際には学習した関数です。静的メソッドと関数の唯一の違いは、静的メソッドはクラスの空間 (クラス名前空間) で定義されるのに対し、関数はプログラムが配置されている空間 (グローバル名前空間) で定義されることです。 。静的メソッドには self や cls などの特別なパラメータがないため、Python インタープリタはクラスやオブジェクトをそれに含まれるパラメータにバインドしません。このため、クラスの静的メソッドではクラス属性やクラス メソッドを呼び出すことはできません。ここでは、センサー ID 番号が正しいかどうかを判断するための IsPort 静的メソッドを定義します。静的メソッドは @staticmethod で変更する必要があります。静的メソッド呼び出しでは、クラス名またはクラス オブジェクトを使用できます。次に例を示します。

_    # 设置ID号_
    id = 1
_    # 判断ID号是否符合格式_
    if SensorClass.IsTrueID(id):
        s = SensorClass()
    else:
        print("Sensor Init False")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

画像

クラスメソッド

静的メソッドと同様に、Python ではクラス内にクラス メソッドを定義することもできます。クラス メソッドの最初のパラメータは慣例的に cls という名前で、現在のクラスに関連する情報のオブジェクトを表します (クラス自体もオブジェクトです)。クラスのメタデータ オブジェクトと呼ばれる場所)、このパラメーターを通じて、クラスに関連する情報を取得し、クラスのオブジェクトを作成できます。Python はクラス自体を cls パラメーターに自動的にバインドします(クラス オブジェクトにはバインドされないことに注意してください)。 )。つまり、クラス メソッドを呼び出すときに、cls パラメーターのパラメーターを明示的に渡す必要はありません。

クラス メソッドは @classmethod 修飾子を使用して変更する必要があります。MasterClass でクラス メソッド MasterInfo を定義します。サンプル コードは次のとおりです。

@classmethod
    def MasterInfo(cls):
        print("Info : "+str(cls))

print(MasterClass.MasterInfo())
  • 1
  • 2
  • 3
  • 4
  • 5

画像

ここに画像の説明を挿入します