5

datetime.now()クラスの新しいインスタンスがインスタンス化されたときに設定するClass属性が必要です。このコードでは、インスタンス化されるときではなく、インポートさMyThing.createdれるときが常にあるように見えます。MyThingmt

from datetime import datetime

class MyThing:
    __init__(self, created=datetime.now()):
        self.created = created

MyThing.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)

mt = MyThing()
mt.created
datetime.datetime(2012, 7, 5, 10, 54, 24, 865791)

とは対照的に、インスタンス化されるcreatedときにそれを行うにはどうすればよいですか?mtMyThing

4

2 に答える 2

11

関数パラメーターのデフォルト値は、関数が定義されるときに1回計算されます。関数が呼び出されたときに、それらは再評価されません。通常、Noneデフォルト値として使用し、本文でテストします。

def __init__(self, created=None):
    self.created = created or datetime.now()

さらに良いことに、作成された日付をコンストラクターに渡したくないようです。この場合、次のようになります。

def __init__(self):
    self.created = datetime.now()
于 2012-07-05T01:01:14.070 に答える
4

すべてがファーストクラスのオブジェクトであるため、パラメーター自体のメンバーであるため、パラメーターに設定しないでください。

class MyThing:
    __init__(self, created=None):
        self.created = created
        if created is None:
            self.created = datetime.now()
于 2012-07-05T00:59:47.847 に答える