python的类方法的定义和使用都了解, 问题是什么情况下会使用python类方法,而不是普通方法或静态方法?
光阴似箭催人老,日月如移越少年。
私が思いつく例としては、クラスメソッドがコンストラクター (__init__) の代わりによく使用されるということです。
__init__
これは簡単な例です:
これはまったく役に立たない計算クラスですが、あまり気にしないでください。このクラスのコンストラクターは、任意の数の位置引数を受け取る関数を完成させます。シーケンス (リストまたはタプル) を指定してこのクラスを構築したい場合はどうすればよいですか?
実際には、スター式を使用するだけです:
ただし、現時点ではクラスメソッドも別のオプションです:
classmethod を使用してコンストラクター置換を簡単に実装できるのは、classmethod の最初のパラメーターがクラス オブジェクトを受け取るためで、これにより、classmethod によって標準コンストラクターに渡された引数を処理し、クラスを使用してオブジェクトを作成できるようになります。オブジェクトを返します。
この問題がインスタンス メソッドに渡される場合、type(self) を使用する追加の変換メソッドが存在します。静的メソッドを使用するには、メソッド内でクラス名をハードコーディングする必要がありますが、これはあまり適切ではありません。 リーリー
type(self)
私が回答した質問: Python-QA
ちょっと待って、例を書いてください~
python3
类方法 と 静态方法 はどちらも 类 の 类变量 にアクセスできますが、实例变量 にはアクセスできません。 静态变量、闭包はPythonでは静态变量を介してのみ実装できるようです。
类方法
静态方法
类
类变量
实例变量
静态变量
闭包
私が思いつく例としては、クラスメソッドがコンストラクター (
__init__
) の代わりによく使用されるということです。これは簡単な例です:
リーリーこれはまったく役に立たない計算クラスですが、あまり気にしないでください。このクラスのコンストラクターは、任意の数の位置引数を受け取る関数を完成させます。シーケンス (リストまたはタプル) を指定してこのクラスを構築したい場合はどうすればよいですか?
実際には、スター式を使用するだけです:
リーリーただし、現時点ではクラスメソッドも別のオプションです:
リーリーclassmethod を使用してコンストラクター置換を簡単に実装できるのは、classmethod の最初のパラメーターがクラス オブジェクトを受け取るためで、これにより、classmethod によって標準コンストラクターに渡された引数を処理し、クラスを使用してオブジェクトを作成できるようになります。オブジェクトを返します。
この問題がインスタンス メソッドに渡される場合、
type(self)
を使用する追加の変換メソッドが存在します。静的メソッドを使用するには、メソッド内でクラス名をハードコーディングする必要がありますが、これはあまり適切ではありません。 リーリーインスタンス メソッド、クラスメソッド、静的メソッドについて詳しく知りたい場合は、以下を参照してください。
私が回答した質問: Python-QA
ちょっと待って、例を書いてください~
python3
リーリー类方法
と静态方法
はどちらも类
の类变量
にアクセスできますが、实例变量
にはアクセスできません。静态变量
、闭包
はPythonでは静态变量
を介してのみ実装できるようです。