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

วิธีจัดการ Circular Dependency ระหว่างคลาส Python

โค้ดต่อไปนี้แสดง Circular Dependency ระหว่างคลาส:

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

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

ในกรณีของคลาส ต่างจากฟังก์ชัน Body ของคลาสจะถูก Execute ตอนนิยาม (Definition Time) เพื่อนิยามคลาส P ต้องเรียกเมธอดของ Q ซึ่งยังไม่ถูกนิยาม

วิธีแก้: แยกการนิยามและการกำหนดค่า

class P(object):
    pass

class Q(object):
    pass

P.q = Q.do_something()
Q.p = P.do_something()

หาก do_something ของแต่ละอันต้องพึ่งพาอีกอันทำงานเสร็จแล้ว วิธีนี้ยังไม่ได้ เราต้องปรับเพิ่มเติม

คลาสมีปัญหานี้เพราะ Directive บนระดับคลาส (เช่น q = Q.do_something()) ทำงานตอนนิยามคลาส ไม่ใช่ตอนสร้างอินสแตนซ์

เราสามารถเสร็จสิ้นการนิยามคลาสภายหลัง หลังจากทั้งสองคลาสถูกนิยามแล้ว ซึ่งพิสูจน์ว่า Python เป็นภาษา Dynamic