2009-05-21 4 views
48

Tôi có hai tệp, node.pypath.py, xác định hai lớp, NodePath, tương ứng.Phụ thuộc thông tư trong Python

Tính đến ngày hôm nay, định nghĩa cho Path tham chiếu đối tượng Node, và do đó tôi đã làm

from node.py import * 

trong file path.py.

Tuy nhiên, tính đến hôm nay tôi đã tạo phương thức mới cho Node tham chiếu đến đối tượng Path.

Tôi đã có vấn đề khi cố gắng nhập path.py: Tôi đã thử nó, và khi chương trình chạy và gọi là Path phương pháp sử dụng Node, một ngoại lệ đã tăng khoảng Node không được xác định.

Tôi phải làm gì?

+2

trùng lặp? http://stackoverflow.com/questions/744373/python-cyclic-imports –

+2

Bạn đang cố gắng có một lớp cho mỗi tệp? Đây là lý do tại sao hiếm khi hoạt động tốt. –

+3

Đồng ý với S.Lott. Python không phải là Java. Bạn không cần một lớp cho mỗi tệp. –

Trả lời

84

Importing Python Modules là một bài viết tuyệt vời giải thích việc nhập vòng tròn bằng Python.

Cách dễ nhất để khắc phục điều này là di chuyển đường dẫn nhập vào cuối mô-đun nút.

+0

Được rồi, nhưng vấn đề là, tôi có hai mô-đun khác 'tree.py' và' block.py' trong gói đó yêu cầu 'node.py' và được yêu cầu bởi' path.py'. Vì vậy, tôi phải đặt tất cả trong một tập tin? Tôi thích có một mô-đun cho mỗi lớp học. –

+1

Bạn đã thử đề xuất của tôi chưa? Nó có thể sẽ hoạt động. Chỉ cần chuyển nhập vào cuối tệp. Tôi khuyên bạn nên đọc bài viết để hiểu tại sao điều này xảy ra. –

+0

Bạn đúng Nadia. Tôi đã đọc sai đề xuất của bạn lúc đầu. Nó đã làm việc. –

13

Một cách tiếp cận khác là nhập một trong hai mô-đun chỉ trong hàm nơi bạn cần ở chế độ khác. Chắc chắn, điều này hoạt động tốt nhất nếu bạn chỉ cần nó trong một hoặc một số lượng nhỏ chức năng:

# in node.py 
from path import Path 
class Node 
    ... 

# in path.py 
class Path 
    def method_needs_node(): 
    from node import Node 
    n = Node() 
    ...