چطور میشه دو تا فایل همدیگه رو import کنن؟

سلام دوستان.
امروز من دست به ی کاری زدم که تو پایتون ارور میداد ولی توی نود کار میکنه.

توی فایل main که قراره اجرا بشه، ی چیزی رو از فایل A ایمپورت کردم و توی فایل A ی چیزی رو از فایل main ایمپگرت کردم!

تو پایتون هم ارور نمیده (با پایتون۳.۵ تست کردم). یعنی شما باید یه جا توی کار با flask اینکار رو انجام بدید (درست یادم نمیاد کجا)
گرچه بهتره اینکار انجام نشه ولی اصولا توسط کامپایلر یا مفصر هندل میشه.

و درمورد عنوان تاپیک؛ باید بگم که کامپایلر و مفصر اینطوری عمل نمیکنن که خط به خط دیتا رو بخونن و بعد اجرا کنن (گرچه نتیجه‌ی نهایی شبیه وقتیه که ما خط به خط میخونیم و اجرا میکنیم تو ذهنمون)
سیستم اینطوریه که کل دیتا رو میخونن، بعد از چک کردن سینتکس و غلط املاییها، رفرنسهایی که دادیم (مثلا نام متغیرها و توابع) رو به زبون خودشون (با اسمهای متفاوت و unique) نگه‌میدارن (برای اینکه اگه دوتا تابع با یک نام توی دوتا namespace مختلف داریم، با هم تداخل نداشته باشن)‌ و اگه دوتا چیز با یک نام ببینن، با توجه به سیستم خودشون، بهش اولویت میدن. (بعضیا اولی رو اولویت میدن بعضیا آخری)

هندل کردن mutual import (اگه اسمشو درست گفته باشم) هم مربوط به همین بخش میشه.

1 Like

اگر به circular dependency بر خوردید خیلی بهتره که کدی که توی A دارید و بقیه ازش استفاده می کنن رو به ماژول Z منتقل کنین. ویا local import انجام بدید.

3 Likes

این مشکل طراحی/معماری کد شما است. هر زمان به چنین موردی برخورد کردید، بدونید که جایی از کار ایراد داره.