2017-12-19 8 views
0

@classmethodの特別なデコレータの使用例を考えると、オーバーロードされていました(メソッド名がと異なるため、)のコンストラクタですが、何も考えられませんでした。別のコンストラクタを作成する以外にPythonで@classmethodを使用する

What's an example use case for a Python classmethod?のような投稿をチェックアウトしましたが、代わりのコンストラクタを指すユースケースしか見つけることができませんでした。

もう一つのケースは、(上記リンクの@samplebiasで述べたように)メソッドをクラスと結合して関連ロジックをカプセル化することでしたが、@staticmethodは関連するロジックを(誰かが@samplebiasの投稿にコメントしたように)。

私はこの特別なデコレータのいくつかの追加のユースケースを特定できますか?

+0

これまでは、代わりのコンストラクタとしてのみ使用しました。私は**決して使用していない** @staticmethod –

+0

基本クラスと4つのサブクラスが基底から継承している場合、メソッドの呼び出し元となるサブクラスに基づいて、フローロジックを変更したり、その一部を変更したいと考えています。次に、このメソッドが呼び出される(サブ)クラスが必要です。それから私はクラスメソッドが必要です。 – percusse

+0

新しいインスタンスのデフォルト値を設定することもできます(ネットワーク関連の場合、デフォルトのタイムアウト、デフォルトのホストなどを設定するなど)。クラスの属性を設定することでこれを行うことができますが、複数のクラスを同時に設定したい場合は、クラスメソッドが便利です。 – kindall

答えて

0

私はPythonでOOPのいくつかの資料を調べていましたが、オーバーロードされたコンストラクタの他に@classmethodデコレータの使用例が見つかりました。

クラスオブジェクトを直接操作(変更)するときは、クラスメソッドを使用することが理にかなっています。たとえば、Employeeオブジェクトがあり、クラス変数としてbase_raise_factorがある場合、この変数を変更するにはEmployeeにクラスメソッドを作成するのが理にかなっています。

Employee.base_raise_factorに何かを直接設定することができますが、encapsulationに準拠し、内部構造を直接変更しない方が良いと思います。さらに、クラスメソッドにいくつかの追加ロジックを定義して、base_raise_factorを更新することもできます。

関連する問題