Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để xử lý sự phụ thuộc vòng tròn giữa các lớp Python?


Chúng tôi có đoạn mã sau cho thấy sự phụ thuộc vòng giữa các lớp python.

class P():
     q = Q().do_something();
     def do_something(self):
         pass
 class Q():
     p = P().do_something();
     def do_something(self):
         pass

Trong trường hợp các lớp, không giống như với các hàm, phần thân của một lớp được thực thi tại thời điểm xác định. Để định nghĩa lớp P, chúng ta cần thực sự gọi một phương thức Q, điều này chúng ta không thể thực hiện vì lớp Q chưa được định nghĩa.

Để giải quyết vấn đề này, chúng ta có thể xác định các lớp và sau đó thêm các thuộc tính sau đó -

class P(object):
   pass
class Q(object):
   pass
P.q = Q.do_something()
Q.p = P.do_something()

Nếu mỗi lệnh gọi do_something phụ thuộc vào lệnh gọi khác đã được thực thi, điều này sẽ không hoạt động. Chúng tôi vẫn cần thực hiện thêm các thay đổi để khắc phục sự cố.

Các lớp có những vấn đề này vì các lệnh ở cấp độ lớp (q =Q.do_something ()) được thực thi trong khi xác định lớp, không phải khi bạn tạo một thể hiện của lớp

Chúng tôi có thể hoàn thành định nghĩa của một lớp sau, sau khi cả hai lớp được định nghĩa. Điều này chứng minh quan điểm rằng Python là một ngôn ngữ động ..