2014-12-15 16 views
8

Bối cảnh: Tôi có một vài vòng chặt chẽ trong một chương trình Python được gọi là liên tục, trong đó bao gồm các phương pháp datetime.datetime.now(), cũng như datetime.datetime.mindatetime.datetime.max thuộc tính. Để tối ưu hóa, tôi muốn nhập chúng vào không gian tên địa phương, tránh sự lặp đi lặp lại, mô-đun không cần thiết tên hệ thống cấp bậc nhìn lên, như vậy:làm thế nào để nhập khẩu trực tiếp tại() từ datetime.datetime submodule

from datetime.datetime import now, min, max 

Tuy nhiên, Python phàn nàn:

Traceback (most recent call last): 
    File "my_code.py", line 1, in <module> 
    from datetime.datetime import now, min, max 
ImportError: No module named datetime 

Câu hỏi : Tại sao công việc nhập mô-đun con trên không?

Cách giải quyết: tôi thay vì có thể làm điều này:

import datetime 
dt_now = datetime.datetime.now 
dt_min = datetime.datetime.min 
dt_max = datetime.datetime.max 

Nhưng, tôi tò mò tại sao phương pháp truyền thống không hoạt động? Tại sao tôi không thể nhập các phương thức và thuộc tính trực tiếp từ datetime.dateime submodule? ... Và, có lý do nào để tránh cách giải quyết ở trên không (ngoài khả năng đọc được, outsmarting bản thân mình, v.v.)?

Cảm ơn!

+0

có thể bạn không nên nhập tối đa và tối thiểu hoặc bạn có thể có kết quả không mong muốn khi bạn gọi hàm tối thiểu hoặc hàm tối đa –

+0

@PadraicCunningham, bạn nói đúng. Đó là lý do tại sao tôi thay đổi tên trong cách giải quyết của mình, nhưng tôi đã quá lười để thêm "như" để đổi tên chúng trong ví dụ ban đầu của tôi. :) – Trevor

Trả lời

9

datetime.datetime không phải là mô-đun con. datetime là một lớp trong mô-đun datetime. now là một phương pháp của lớp đó. Bạn không thể sử dụng from...import... để nhập các phương thức riêng lẻ của một lớp. Bạn chỉ có thể sử dụng nó để nhập các mô-đun riêng lẻ từ một gói hoặc các đối tượng riêng lẻ tồn tại ở cấp cao nhất của một mô-đun.

Đối với cách giải quyết của bạn, nếu bạn muốn viết tắt, tôi tìm thấy nó dễ đọc hơn để làm điều này:

from datetime import datetime as dt 
dt.now() 
# you can also use dt.max, dt.min, etc. 

Nếu bạn thực sự muốn đặt những phương pháp trực tiếp trong các biến địa phương, sau đó workaround bạn có ý nghĩa.

+0

Ahh, bắt tốt! Cảm ơn, @BrenBarn! – Trevor

Các vấn đề liên quan