我想知道為什么這有效
import datetime as dt
test1 = dt.datetime
print(test)
''' prints: <class 'datetime.datetime'>'''
所以據我了解python,要創建一個類的實體,你需要用這樣的括號呼叫它:
test2 = dt.datetime(2021, 12, 31)
(呼叫建構式會強制您輸入年、月和日)。
起初我認為像第一個例子(沒有括號)一樣呼叫 datetime 必須是一個屬性或其他東西。但是我在“datetime”類中找不到單一的常設屬性“datetime”。
有趣的是 - 你怎么稱呼它并不重要,因為兩行都會導致相同的結果:
test = dt.datetime
test2 = dt.datetime(2021, 12, 31)
print(test.now())
print(test2.now())
但為什么?我錯過了什么?非常感謝!
uj5u.com熱心網友回復:
這里有一些東西要拆開。
import datetime as dt
這將匯入 datetime模塊并將其別名為dt. 接下來dt.datetime是datetime模塊內部的類dt(模塊的別名datetime)。最后,now()被定義為一個類方法,所以它不需要被實體化。因此,dt.datetime.now()呼叫 模塊now類的類方法,而以下內容:datetimedt
date = dt.datetime(2021, 1, 1)
date.now()
創建datetime 類的一個實體,然后讓它訪問類方法now。
查看datetime模塊中類的定義:
# 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 參考對classmethod 裝飾器的說明:
可以在類(例如
C.f())或實體(例如C().f())上呼叫類方法。除了它的類之外,該實體被忽略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/390731.html
下一篇:Python日期時間轉換器
