クラスのコンストラクタの複数の定義

Pythonでクラスコンストラクタといえば、一般的に(__new__がインスタンスを作成するために使用される)インスタンスの初期化のために、方法__init__クラスを実装しました。
しかし、JavaのPythonのメソッドとは異なり、非常に重い負荷を示しています。そのため、さまざまなコンストラクタの数を達成するために、あなたは異なるアプローチが必要な場合があります。
一つのアプローチは、次のように、クラスメソッドクラスメソッドを使用することです。

import time

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    @classmethod
    def today(cls):
        t = time.localtime()
        return cls(t.tm_year, t.tm_mon, t.tm_mday)


a = Date(2012, 12, 21) # Primary
b = Date.today() # Alternate

そうでない場合は実用的なクラスメソッドは、別の呼び出し規約のマナー__init __()メソッドを許可するように、代替と考えるかもしれません。次のとおりです。

class Date:
    def __init__(self, *args):
        if len(args) == 0:
            t = time.localtime()
            args = (t.tm_year, t.tm_mon, t.tm_mday)
        self.year, self.month, self.day = args

一方で、このアプローチは、問題を解決するために見えるかもしれませんが、プログラムが理解し、維持するために、コードを困難にします。たとえば、この実装は、(パラメータ名を持つ)便利なヘルプ文字列が表示されません。また、日付インスタンスを作成するコードは明らかではありません。

a = Date(2012, 12, 21)    # Clear. A specific date. 
 b = Date()               #  ??? What does this do?

# Class method version
c = Date.today()          # Clear. Today's date.

おすすめ

転載: www.cnblogs.com/jeffrey-yang/p/12142780.html