5

我想要一个 Class 属性,它datetime.now()在实例化类的新实例时设置。使用此代码,MyThing.created似乎总是何时MyThing导入,而不是何时mt实例化。

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)

我该怎么做才能实例化,createdmt不是MyThing

4

2 回答 2

11

函数参数的默认值在定义函数时计算一次。调用函数时不会重新评估它们。通常,您会使用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 回答