为什么不使用 ( ) 就可以调用 python 的 datetime.datetime?
Why is it possible to call python's datetime.datetime without using ( )?
我想知道为什么会这样
import datetime as dt
test1 = dt.datetime
print(test)
''' prints: <class 'datetime.datetime'>'''
据我了解 python,要创建 class 的实例,您需要用方括号调用它,如下所示:
test2 = dt.datetime(2021, 12, 31)
(调用构造方法强制输入年月日)
一开始我以为像第一个例子(没有括号)那样调用datetime一定是一个属性什么的。但是我在class“datetime”中找不到一个单一的常设属性“datetime”。
有趣的是 - 你怎么称呼它并不重要,因为两条线导致相同的结果:
test = dt.datetime
test2 = dt.datetime(2021, 12, 31)
print(test.now())
print(test2.now())
但是为什么呢?我错过了什么?
非常感谢!
这里有一些东西要打开。
import datetime as dt
这会导入日期时间 模块 并将其别名为 dt
。接下来,dt.datetime
是模块 dt
中的 class datetime
(datetime
模块的别名)。最后,now()
被定义为 class 方法,因此不需要实例化。因此,dt.datetime.now()
调用模块 dt
的 class datetime
的 class 方法 now
而以下内容:
date = dt.datetime(2021, 1, 1)
date.now()
创建 datetime
class 的实例,然后让它访问 class 方法 now
。
见datetime
class模块内的定义:
# Excerpt of datetime.py on Python 3.8.10
class datetime(date):
@classmethod
def now(cls, tz=None):
"Construct a datetime from time.time() and optional time zone info."
t = _time.time()
return cls.fromtimestamp(t, tz)
最后,看这里Python reference has to say on the classmethod
decorator:
A class method can be called either on the class (such as C.f()
) or on
an instance (such as C().f()
). The instance is ignored except for its
class.
我想知道为什么会这样
import datetime as dt
test1 = dt.datetime
print(test)
''' prints: <class 'datetime.datetime'>'''
据我了解 python,要创建 class 的实例,您需要用方括号调用它,如下所示:
test2 = dt.datetime(2021, 12, 31)
(调用构造方法强制输入年月日)
一开始我以为像第一个例子(没有括号)那样调用datetime一定是一个属性什么的。但是我在class“datetime”中找不到一个单一的常设属性“datetime”。
有趣的是 - 你怎么称呼它并不重要,因为两条线导致相同的结果:
test = dt.datetime
test2 = dt.datetime(2021, 12, 31)
print(test.now())
print(test2.now())
但是为什么呢?我错过了什么? 非常感谢!
这里有一些东西要打开。
import datetime as dt
这会导入日期时间 模块 并将其别名为 dt
。接下来,dt.datetime
是模块 dt
中的 class datetime
(datetime
模块的别名)。最后,now()
被定义为 class 方法,因此不需要实例化。因此,dt.datetime.now()
调用模块 dt
的 class datetime
的 class 方法 now
而以下内容:
date = dt.datetime(2021, 1, 1)
date.now()
创建 datetime
class 的实例,然后让它访问 class 方法 now
。
见datetime
class模块内的定义:
# Excerpt of datetime.py on Python 3.8.10
class datetime(date):
@classmethod
def now(cls, tz=None):
"Construct a datetime from time.time() and optional time zone info."
t = _time.time()
return cls.fromtimestamp(t, tz)
最后,看这里Python reference has to say on the classmethod
decorator:
A class method can be called either on the class (such as
C.f()
) or on an instance (such asC().f()
). The instance is ignored except for its class.