Tôi đã thử một vài tùy chọn rõ ràng nhưng không ai trong số chúng hoạt động:
In [150]: x
Out[150]: datetime.date[2012, 9, 1]
In [151]: type[x]
Out[151]: datetime.date
In [152]: isinstance[x, datetime.date]
---------------------------------------------------------------------------
TypeError Traceback [most recent call last]
in []
----> 1 isinstance[x, datetime.date]
TypeError: isinstance[] arg 2 must be a class, type, or tuple of classes and types
In [153]: x is datetime.date
Out[153]: False
In [154]: type[x] is datetime.date
Out[154]: False
Cách làm điều này là gì?
Hỏi ngày 22 tháng 4 năm 2013 lúc 15:56Apr 22, 2013 at 15:56
6
Tôi tin rằng lý do nó không hoạt động trong ví dụ của bạn là bạn đã nhập
from datetime import datetime
4 như vậy:from datetime import datetime
Điều này dẫn đến lỗi bạn thấy
In [30]: isinstance[x, datetime.date]
---------------------------------------------------------------------------
TypeError Traceback [most recent call last]
/ in []
----> 1 isinstance[x, datetime.date]
TypeError: isinstance[] arg 2 must be a class, type, or tuple of classes and types
Nếu bạn chỉ cần nhập như vậy:
import datetime
Mã sẽ chạy như thể hiện trong tất cả các câu trả lời khác
In [31]: import datetime
In [32]: isinstance[x, datetime.date]
Out[32]: True
In [33]:
Đã trả lời ngày 22 tháng 4 năm 2013 lúc 16:06Apr 22, 2013 at 16:06
olly_ukolly_ukolly_uk
11.4K3 Huy hiệu vàng39 Huy hiệu bạc45 Huy hiệu Đồng3 gold badges39 silver badges45 bronze badges
5
đúng cách là
import datetime
isinstance[x, datetime.date]
Khi tôi thử điều này trên máy của mình, nó hoạt động tốt. Bạn cần xem xét lý do tại sao
from datetime import datetime
5 không phải là một lớp. Có lẽ bạn đang che giấu nó với một cái gì đó khác? hoặc không tham chiếu chính xác cho nhập khẩu của bạn?Đã trả lời ngày 22 tháng 4 năm 2013 lúc 15:58Apr 22, 2013 at 15:58
CMDCMDcmd
5.64415 Huy hiệu bạc29 Huy hiệu đồng15 silver badges29 bronze badges
4
import datetime
d = datetime.date[2012, 9, 1]
print type[d] is datetime.date
> True
Đã trả lời ngày 22 tháng 4 năm 2013 lúc 15:59Apr 22, 2013 at 15:59
5
Theo tài liệu lớp
from datetime import datetime
6 là cha mẹ cho lớp from datetime import datetime
4. Và phương thức from datetime import datetime
8 sẽ cung cấp cho bạn from datetime import datetime
9 trong mọi trường hợp. Nếu bạn cần phân biệt from datetime import datetime
4 với from datetime import datetime
6, bạn nên kiểm tra tên của lớpimport datetime
datetime.datetime.now[].__class__.__name__ == 'date' #False
datetime.datetime.now[].__class__.__name__ == 'datetime' #True
datetime.date.today[].__class__.__name__ == 'date' #True
datetime.date.today[].__class__.__name__ == 'datetime' #False
Tôi đã phải đối mặt với vấn đề này khi tôi có các quy tắc định dạng khác nhau cho ngày và ngày với thời gian
Đã trả lời ngày 27 tháng 11 năm 2018 lúc 8:38Nov 27, 2018 at 8:38
Trong Python 3.8.4, có thể kiểm tra rằng phương pháp có
In [30]: isinstance[x, datetime.date]
---------------------------------------------------------------------------
TypeError Traceback [most recent call last]
/ in []
----> 1 isinstance[x, datetime.date]
TypeError: isinstance[] arg 2 must be a class, type, or tuple of classes and types
2 sẽ thất bại khi kiểm tra xem from datetime import datetime
4 có phải là liệu from datetime import datetime
6 hay from datetime import datetime
4 vì cả hai kiểm tra sẽ cung cấp from datetime import datetime
9. >>> from datetime import datetime, date
>>> mydatetime = datetime.now[]
>>> mydate = mydatetime.date[]
>>> isinstance[mydatetime, datetime]
True
>>> isinstance[mydatetime, date]
True
Điều này là do thực tế là
from datetime import datetime
4 là một lớp con của from datetime import datetime
6 như được giải thích trong câu trả lời khác này:Một thể hiện của một lớp dẫn xuất cũng là một ví dụ của một lớp cơ sở,
Do đó, khi phân biệt giữa
from datetime import datetime
4 và from datetime import datetime
6, nên sử dụng import datetime
1 thay thế: >>> type[mydatetime] == date
False
>>> type[mydate] == date
True
>>> type[mydate] == datetime
False
>>> type[mydatetime] == datetime
True
Đã trả lời ngày 11 tháng 8 năm 2021 lúc 14:10Aug 11, 2021 at 14:10
Nếu mã hiện tại của bạn đã dựa vào
import datetime
2, bạn cũng có thể chỉ cần nhập from datetime import datetime
6from datetime import datetime
0Đã trả lời ngày 1 tháng 12 năm 2015 lúc 19:21Dec 1, 2015 at 19:21
Dmitry B.Dmitry B.Dmitry B.
8.9003 huy hiệu vàng41 Huy hiệu bạc63 Huy hiệu đồng3 gold badges41 silver badges63 bronze badges
Trong Python 3.5,
import datetime
4 hoạt động với tôi:from datetime import datetime
1Đã trả lời ngày 5 tháng 5 năm 2016 lúc 6:43May 5, 2016 at 6:43
Fedorquifedorquifedorqui
261K99 Huy hiệu vàng527 Huy hiệu bạc579 Huy hiệu Đồng99 gold badges527 silver badges579 bronze badges
Nếu bạn đang sử dụng gói Freezegun trong các thử nghiệm, bạn có thể cần phải kiểm tra isinstance thông minh hơn hoạt động tốt với fakedate và ban đầu ngày/thời gian ban đầu bên trong với bối cảnh freeze_time:freezegun package in tests you may need to have more smart isinstance checks which works well with FakeDate and original Date/Datetime beeing inside with freeze_time context:
from datetime import datetime
2và các thử nghiệm để xác minh việc thực hiệntests to verify the implementation
from datetime import datetime
3Đã trả lời ngày 29 tháng 6 năm 2020 lúc 15:46Jun 29, 2020 at 15:46
Pymenpymenpymen
4.97540 Huy hiệu bạc33 Huy hiệu đồng40 silver badges33 bronze badges