Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เราจะจัดการกับการพึ่งพาแบบวงกลมระหว่างคลาส Python ได้อย่างไร


เรามีโค้ดต่อไปนี้ซึ่งแสดงการพึ่งพาแบบวงกลมระหว่างคลาส python

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

ในกรณีของคลาส ไม่เหมือนกับฟังก์ชัน เนื้อหาของคลาสจะถูกดำเนินการในเวลาที่กำหนด ในการกำหนดคลาส P เราจำเป็นต้องเรียกเมธอด Q ซึ่งเราไม่สามารถทำได้เพราะยังไม่ได้กำหนดคลาส Q

เพื่อแก้ไขปัญหานี้ เราสามารถกำหนดคลาสแล้วเพิ่มคุณสมบัติในภายหลัง -

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

หากการโทร do_something แต่ละครั้งอาศัยการเรียกอื่นที่ดำเนินการไปแล้ว สิ่งนี้จะไม่ทำงาน เรายังต้องทำการเปลี่ยนแปลงเพิ่มเติมเพื่อแก้ไขปัญหา

คลาสมีปัญหาเหล่านี้เนื่องจากคำสั่งในระดับคลาส (q =Q.do_something()) ถูกดำเนินการในขณะที่กำหนดคลาส ไม่ใช่เมื่อคุณสร้างอินสแตนซ์ของคลาส

เราอาจทำคำจำกัดความของคลาสให้สมบูรณ์ในภายหลัง หลังจากที่ทั้งสองคลาสถูกกำหนดแล้ว นี่เป็นการพิสูจน์ว่า Python เป็นภาษาไดนามิก..