ホームページ  >  記事  >  バックエンド開発  >  初心者向けに @classmethod と @staticmethod を理解する方法

初心者向けに @classmethod と @staticmethod を理解する方法

anonymity
anonymityオリジナル
2019-05-27 11:09:313026ブラウズ

staticmethod はクラスで定義された関数と同等であるため、メソッドがインスタンスにも特定のクラスにも関連していない場合は、それを静的メソッドとして定義することをお勧めします。これにより、コードが一目瞭然になるだけでなく、一目でわかるだけでなく、メンテナンスも容易になります。

サブクラス呼び出しメソッドに暗黙的に渡されるパラメータはオブジェクトに対応するクラスであり、対応するクラスのクラス変数は呼び出しプロセス中に動的に生成されます。

初心者向けに @classmethod と @staticmethod を理解する方法

classicmethod クラスと staticmethod クラスは、オブジェクトを作成できるデータ構造であることを理解してください。クラスが呼び出されると、そのクラスのインスタンス オブジェクトが作成されます。オブジェクトが作成されると、Python は init() メソッドが実装されているかどうかを確認します。 init() が実装されている場合は、インスタンス オブジェクトを最初のパラメータ (self) として渡して呼び出されます。

たとえば、日付情報を格納するクラス Date を定義すると、ここで初期化関数が再定義されます。

class Date(object):
 
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)

tell Date メソッドを呼び出す必要がある場合は、最初にインスタンスを作成するか、Date().tellDate() を使用する必要があります。

date1 = Date()
date1.tellDate()

クラス名を使用して関数を直接呼び出す方法?

@classmethod または @staticmethod を使用して関数を呼び出すことができます。

ここで、多数の Date インスタンスを作成する必要があり、日付情報が外部から次の形式で渡されると仮定します。文字列。形式は「dd-mm-yyyy」です。行う必要があること

日付情報文字列を、年、月、日の 3 つの変数を含むタプルに解析します。

Date オブジェクトをインスタンス化するときに、年、月、日を次のように渡します。パラメーター 。

次のように:

day, month, year = map(int, string_date.split('-'))
date1 = Date(day, month, year)

Python は C のようにオーバーロードできないため、クラス メソッドを導入します。これは self パラメーターを必要としませんが、最初のパラメーターが独自のクラスを表す cls である必要があります。パラメータ。

@classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1

クラス名を直接使用できます。メソッド名 ()

このようなプログラミングの利点は次のとおりです:

文字列分解操作を繰り返し使用できるため、パラメータを 1 回渡すだけです;

OOP;

cos はクラス自体であり、クラスのインスタンスではありません。Date を親クラスとして使用すると、そのサブクラスにもfrom_string メソッド

Staticmethod はクラス メソッドに非常に似ていますが、関数を使用する場合と同様に、独自のオブジェクトを表す self や独自のクラスの cls パラメーターを必要としません。

@staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999

すべてのプログラムと実行結果

class Date(object):
    day = 0
    month = 0
    year = 0
 
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
        
    def tellDate(self):
        print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date = cls(day, month, year)
        return date
 
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split(&#39;-&#39;))
        return day <= 31 and month <= 12 and year <= 3999
 
if __name__ == '__main__':
    date1 = Date()
    date1.tellDate()
    date2 = Date.from_string("14-04-2016")
    date2.tellDate()
    print Date.is_date_valid("14-04-2016")

実行結果は次のとおりです:

Today is 0-0-0
Today is 14-4-2016
True

以上が初心者向けに @classmethod と @staticmethod を理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。