2015-06-25 24 views
5

Tôi gặp sự cố khi tìm mẹo if __name == '__main__' để hoạt động trong môi trường IPython, Spyder. Tôi đã thử mọi phương pháp được đưa ra trong chủ đề này: if __name__ == '__main__' in IPythonnếu __name__ == '__main__' không hoạt động ipython

Dưới đây là các module siêu đơn giản của tôi

Module1.py

Class UnitTest(): 
    print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    print 'Mod2 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Vì vậy, tôi chạy Module2.py và tôi luôn thấy cả hai hình ảnh Mod2 UnitTestMod1 UnitTest được in. Đây là những thực hiện trong một hạt nhân IPython. Tôi chỉ muốn thông báo Mod2 UnitTest hiển thị.

Có ý tưởng gì không?

+3

Bạn đang sử dụng các lớp học thay vì chức năng. Mã trong khai báo lớp được chạy lúc nhập. – Kevin

+0

Yup. Xem câu trả lời của tôi dưới đây. Sai lầm hoàn toàn ngu ngốc không nhận ra mã trong khai báo lớp được chạy vào thời gian nhập !!! – AZhao

Trả lời

2

Tôi đã xóa câu hỏi này sớm hơn vì xấu hổ nhưng cũng có thể chia sẻ trong trường hợp bất kỳ newb nào khác nhìn thấy điều này.

Tôi quên đặt dòng UnitTest bên trong phương thức __init__. Vì vậy, các bài kiểm tra đơn vị đã được chạy mỗi lần duy nhất khi lớp học được xác định và không phải khi đối tượng được khởi tạo. Mã nên là:

Module1.py

Class UnitTest(): 
    def __init__(self): 
     print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    def __init__(self): 
     print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    print 'Mod2 UnitTest!' 
Các vấn đề liên quan