python `@classmethod`デコレーターが説明しました
クラスメソッドは、@ClassMethodデコレーターを介してPythonで定義されるメソッドです。最初のパラメーターはクラス自体(CLS)で、クラス状態へのアクセスまたは変更に使用されます。特定のインスタンスではなく、クラス全体に影響を与えるクラスまたはインスタンスを通じて呼び出すことができます。たとえば、Personクラスでは、show_count()メソッドは作成されたオブジェクトの数を数えます。クラスメソッドを定義するときは、@ClassMethodデコレータを使用して、Change_Var(new_Value)メソッドなどの最初のパラメーターCLSに名前を付けてクラス変数を変更する必要があります。クラス方法は、インスタンスメソッド(自己パラメーター)および静的メソッド(自動パラメーターなし)とは異なり、工場の方法、代替コンストラクター、およびクラス変数の管理に適しています。一般的な用途には、さまざまな初期化方法からオブジェクトの作成、サブクラス構成の統一された管理などが含まれます。
@classmethod
、クラスのメソッドを定義するPythonの非常に実用的なデコレーターです。通常のインスタンスメソッドとは異なり、クラスメソッドの最初のパラメーターは、インスタンス( self
)ではなく、クラス自体(通常はcls
として書かれています)です。これは、クラスまたはインスタンスを通じてそれを呼び出すことができ、オブジェクトを作成せずにクラスで操作できることを意味します。

クラスの方法とは何ですか?
クラス方法は、クラスの特定のインスタンスではなく、クラスに関連付けられたメソッドです。 @classmethod
この方法で、特定のインスタンスではなくクラスの状態にアクセスまたは変更する場合に適しています。

簡単な例を見てみましょう:
クラスの人: count = 0 def __init __(self): person.count = 1 @classmethod def show_count(cls): 印刷(f "合計人:{cls.count}")
この例では、 show_count
はクラスメソッドです。クラス名のPerson.show_count()
を通じてそれを呼び出す場合でも、インスタンスを通じて、現在作成されているPerson
オブジェクトの数を出力します。

クラスメソッドを定義および使用する方法は?
クラスメソッドの定義は非常に簡単です。メソッドの前に@classmethod
デコレータを追加し、最初のパラメーターcls
に名前を付ける必要があります(これは従来の執筆方法です)。
クラスmyclass: class_var = "hello" @classmethod def change_var(cls、new_value): cls.class_var = new_value
使用することも非常に柔軟です:
-
MyClass.change_var("World")
- インスタンスは、
my_instance = MyClass(); my_instance.change_var("Hi")
注:クラスメソッドはインスタンスを通じて呼び出すことができますが、インスタンスに固有の状態ではなく、クラス全体の状態に影響します。
クラスメソッド対静的メソッド対インスタンスメソッド
これら3つは混乱しやすいです。それらの用途を簡単に区別しましょう。
- 方法:最も一般的な方法である最初のパラメーターは、オブジェクトレベルでデータを処理するために使用される
self
です。 - クラスメソッド(
@classmethod
) :最初のパラメーターはcls
で、クラスレベルの属性にアクセスまたは変更する必要があるシナリオに適しています。 - 静的メソッド(
@staticmethod
) :自動的に渡されるself
またはcls
パラメーターはありませんが、「クラスに属する通常の関数」のようなものです。
違いを説明するための例を挙げてください。
クラスユーザー: 役割= "メンバー" def instance_method(self): print( "これはインスタンスメソッドです")) @classmethod def class_method(cls): 印刷(f "これは{cls.role}のクラスメソッドです") @StaticMethod def static_method(): print( "これは静的な方法です")
-
instance_method()
インスタンスでのみ呼び出すことができます。 -
class_method()
とstatic_method()
の両方は、クラスまたはインスタンスを通じて呼び出すことができます。 -
static_method()
クラスまたはインスタンスの状態にまったく依存しません。
一般的な使用シナリオは何ですか?
工場メソッド
クラスの方法は、「工場の方法」、つまりクラスのさまざまなインスタンスを返すために非常に適しています。クラスポイント: def __init __(self、x、y): self.x = x self.y = y @classmethod def_polar(cls、r、theta): #極座標をデカルト座標に変換します return cls(r * math.cos(theta)、r * math.sin(theta))
クラス変数を変更
同じ親クラスから継承されたサブクラスのセットがあり、各サブクラスに独自の構成アイテムがある場合は、クラスメソッドを使用してこれらの構成を均一に管理できます。代替コンストラクター
たとえば、オブジェクトを初期化する複数の方法があり、複数のクラスメソッドを使用して異なる構造ロジックを表すことができます。
基本的にそれだけです。 @classmethod
理解するための鍵は、インスタンスではなくクラスに作用し、継承してオーバーライドできることを把握することです。もっと使用すると、見た目よりも便利であることがわかります。
以上がpython `@classmethod`デコレーターが説明しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

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

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

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

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

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

ホットトピック

リモートPythonアプリケーションをデバッグするには、Debugpyを使用してポート転送とパスマッピングを構成する必要があります。まず、リモートマシンにDebugpyをインストールし、コードを変更してポート5678を聴き、SSHトンネルを介してリモートポートをローカルエリアに転送し、Vscodeの発射で「AttachToreMotepython」を構成し、ローカルドロートとレモートのポスフォースを正しく設定します。最後に、アプリケーションを開始し、デバッガーに接続して、リモートブレークポイントのデバッグ、可変チェック、コードステッピングを実現します。プロセス全体は、デバッグの安全なポート転送と正確なパスマッチングに依存します。

sursepythonisinstalledbyrunningpython - versionorpython3-- versionintheterminal; ifnotinstalled、downloadfrompython.organdaddtopath.2.insublimetext、gototools> buildsystem> newbuildsystem、aglectecontentwith {"

Pythonスクリプトを実行するには、sublimetextのビルドシステムを構成する必要があります。 2. sublimetextで新しいビルドシステムを作成し、{"cmd":["python"、 "-u"、 "$ file"]、 "file_regex": "^[] file \"(...?)\ "、line(qu Quie(0-9]*)"、 "selector": "^[] file \"(...?)\ "を入力します。

abstruteimportsspecifytheTheTheTheTheTop-LevelPackage、whiLERELATIVESTOREMORTIMPORTSORECTORECTORECTORECTORESRESRESRESTOTHECURRENTPACKAGE;

2つ以上のリストの一般的な要素を見つける最も効率的な方法は、セットの交差操作を使用することです。 1。リストをセットに変換し、&operatorまたは.intersection()メソッドを使用して、たとえば、common = list(set(list1)&set(list2)); 2。複数のリストの場合、set(list1).intersection(set(list2)、set(list3))またはset.intersection(*map(set、list))を使用して動的処理を実現できます。 3.無秩序で自動的な重複排除に注意してください。注文を維持する必要がある場合は、元のリストを通過して、設定された判断を組み合わせることができます。

モジュールレベルのインスタンスを使用することは、Python習慣に最もシンプルで最も単純です。モジュール内のクラスインスタンスを定義することにより、Pythonモジュールの機能を1回だけ使用して、config.pyファイルの作成やconfigインスタンスの定義など、グローバルな一意性を確保します。他のモジュールは、インポートするときに同じオブジェクトを共有します。この方法はシンプルで、読みやすく、スレッドセーフであり、ほとんどの実用的なシナリオに適しています。さらに、__new__メソッドを書き換えて、デコレーター、メタクラスなどを使用して実装することもできます。ここで、__new__メソッドはクラス変数を通じてインスタンスの独自性を制御しますが、安全性の問題に注意を払います。デコレーター法はクラス全体で再利用できますが、ゴミ収集に影響を与える可能性があります。 Metaclassメソッドは、継承と集中制御が複製されますが複製をサポートします。

1. SDKの公式ダウンロードは、以下の図に示すように、OSバージョンと非OSバージョンの2種類のSDKを選択します。OSバージョン、つまりESP8266RTOSSDKを選択し、リンクをクリックしてGitHubにジャンプしてダウンロードします。現在の最新バージョンはv3.4で、下の図に示すように、適切な場所に減圧します。2。Windowsシステムに開発ツールチェーンをインストールします。 WindowsシステムにはMAKE環境がないため、統合されたツールチェーンが必要です。 https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windo

データサイエンスの初心者にとって、「経験不足」から「業界の専門家」への飛躍の核心は継続的な実践です。実践の基礎は、豊かで多様なデータセットです。幸いなことに、インターネット上には無料のパブリックデータセットを提供する多数のWebサイトがあります。これは、スキルを向上させ、スキルを磨くための貴重なリソースです。
