Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实例化时使用datetime.now()的Python类_Python_Class_Datetime - Fatal编程技术网

实例化时使用datetime.now()的Python类

实例化时使用datetime.now()的Python类,python,class,datetime,Python,Class,Datetime,我想要一个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(2

我想要一个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)

如何才能在实例化
mt
时创建
,而不是
虚构

不要在参数中设置它,因为它们是函数本身的成员,因为一切都是第一类对象

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

定义函数时,函数参数的默认值只计算一次。调用函数时不会重新计算它们。通常,您会使用
None
作为默认值,并在正文中对其进行测试:

def __init__(self, created=None):
    self.created = created or datetime.now()
更好的是,看起来您可能不想将创建的日期传递给构造函数,在这种情况下:

def __init__(self):
    self.created = datetime.now()

或者,
self.created=datetime.now()如果created不是其他创建的,我就是讨厌双重赋值。:)很高兴知道这两种情况的备选方案。非常感谢。