この記事ではPythonのインスタンスメソッド、クラスメソッド、静的メソッドの機能と違いについて解説します。使い方

Python クラスには、インスタンス メソッド、クラス メソッド、静的メソッドという 3 つの一般的なメソッドがあることは誰もが知っています。では、これらのメソッドは何をするのでしょうか? それらの違いは何ですか? それの使い方?これらの質問を念頭に置いて、以下の 3 つの方法を見てみましょう。

1. 手法の紹介
ここに画像の説明を挿入

2. コードの説明

学生クラスを実装したい場合、それに実装する関数は次の 3 つがあります。

機能 1: 各生徒の合計スコアを計算する (get_total_score() メソッド)
機能 2: インスタンス化された生徒の合計スコアをランク付けする (rank() メソッド)
機能 3: 試験時間を説明する (つまり、 Exam_time() メソッド

import random
​
​
class Students(object):
​
    scores = []
​
    def __init__(self, name):
        self.name = name
​
    # 实例方法:
    def get_total_score(self):  # 返回某位学生的总成绩
        total_score = random.randint(200,600)
        student_scores = (self.name, total_score)
        Students.scores.append(student_scores)
        return student_scores
​
    # 类方法
    @classmethod
    def rank(cls):      # 学生成绩排名
        total_scores = Students.scores
        return sorted(total_scores, key=lambda x:x[1], reverse=True)
​
    # 静态方法
    @staticmethod
    def exam_time():    # 考试时间说明
        return {"考试时间":'上午10~12点,下午2~4点'}
​
​
a = Students('张三')
a.get_total_score()     # 1.实例方法调用:通过实例对象来调用
b = Students('李四')
b.get_total_score()
c = Students('王五')
c.get_total_score()
d = Students('赵六')
d.get_total_score()
e = Students('刘七')
e.get_total_score()
​
print(Students.rank())          # 2.类方法调用:使用类名调用,也可以使用实例对象调用
print(Students.exam_time())     # 3.静态方法调用:使用类名调用,也可以使用实例对象调用
​

ご覧のとおり、インスタンス メソッド、クラス メソッド、および静的メソッドは Student クラスで定義されています。では、なぜこれを別のメソッドとして定義したのでしょうか? これはビジネスの観点から理解する必要があります。

各生徒の合計成績の計算は生徒ごとに行われるため、合計成績を表示するために別の生徒がインスタンス化されるため、インスタンス メソッドを定義するのが合理的です。

インスタンス化された生徒の合計スコアをランク付けします。このランキングは明らかにオブジェクト (クラス) 全体のランキングです。生徒 (オブジェクト) をインスタンス化してランキングを呼ぶのは明らかに不合理ですが、生徒全体に対するものである必要があります。つまり、このクラスの生徒はランク付けされるため、クラス メソッドとして定義するのが合理的です。

テスト時などは学生向けに使用しますが、学生には依存せず、クラスやインスタンスのプロパティやメソッドは使用しません。したがって、静的メソッドとして宣言する方が合理的です。そこで質問になりますが、学生クラスから独立しているのでクラス外の機能として利用することはできるのでしょうか?まず、使い方としては可能です。これは、クラスの外に同様の関数を作成して行うこともできます。ただし、ビジネスの観点から、このメソッドの機能が他のクラスで使用できない場合は、このクラスに置くのが合理的です。逆に、このメソッドの関数が他のクラスからも呼び出せる場合は、関数として宣言する方が合理的です。

最後に、私の記事をよく読んでくださった皆さんに感謝します。互恵性は常に必要です。あまり価値のあるものではありませんが、使用できる場合は、直接持ち帰ることができます: [記事の最後にまとめてあります] 】


     [以下は、2023 年に私が編集した最も完全なソフトウェア テスト エンジニア学習ナレッジ アーキテクチャ システム図と資料の完全なセットです]


1. Pythonプログラミングの入門から習得まで

2.インターフェース自動化プロジェクトの実戦

3. Web自動化プロジェクトの実戦


4. アプリ自動化プロジェクトの実戦

5. 一流メーカーの再開


6. DevOps システムのテストと開発

7. 一般的に使用される自動テストツール


8、JMeterのパフォーマンステスト

9. まとめ(最後にちょっとしたサプライズ)

寿命が長いのでオイルを追加してください。すべての努力は決し​​て裏切られることはなく、粘り強く続ける限り、最後には必ずご褒美が得られます。自分の時間を大切にして夢を追いかけてください。初心を忘れず、前に進んでください。あなたの未来はあなたの手の中にあります!

人生は短く、時間は貴重です。将来何が起こるかを予測することはできませんが、現在の瞬間を把握することはできます。一日一日を大切にし、自分自身をより強く、より良くするために努力してください。確固たる信念、粘り強い追求、成功はやがてあなたのものになります。

常に自分自身に挑戦することによってのみ、常に自分を超えることができます。夢を追い続け、勇敢に前進すれば、その葛藤の過程がとても美しく、やりがいのあるものであることに気づくでしょう。自分を信じてください、あなたならできるよ! 

おすすめ

転載: blog.csdn.net/nhb687096/article/details/132248469