我想要一个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)
我该怎么做才能created
实例化mt
,而不是MyThing
?
答案 0 :(得分:8)
定义函数时,函数参数的默认值计算一次。调用函数时不会重新评估它们。通常,您使用None
作为默认值,并在正文中对其进行测试:
def __init__(self, created=None):
self.created = created or datetime.now()
更好的是,看起来你可能不希望将创建的日期传递给构造函数,在这种情况下:
def __init__(self):
self.created = datetime.now()
答案 1 :(得分:4)
不要在参数中设置它,因为它们是函数本身的成员,因为所有东西都是第一类对象。
class MyThing:
__init__(self, created=None):
self.created = created
if created is None:
self.created = datetime.now()