سؤال

لنفترض أنني الهيكل التالي:

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

أ.py, ب.py و ج.py تتشارك بعض الواردات (التسجيل, التشغيل, إعادة, الخ).هل من الممكن أن استيراد هذه ثلاث أو أربع وحدات مشتركة من __init__.py الملف بحيث لا تضطر إلى استيراد لهم في كل واحد من الملفات ؟

تحرير:هدفي هو لتجنب الاضطرار إلى استيراد 5-6 وحدات في كل ملف و انها ليست ذات الصلة إلى أسباب الأداء.

هل كانت مفيدة؟

المحلول

لا، فإنها يجب أن تكون وضعت في مساحة كل وحدة، لذلك عليك أن استيرادها بطريقة ما (إلا إذا كنت تمر logging حولها باعتبارها حجة وظيفة، والتي ستكون وسيلة غريبة لفعل الأشياء، على أقل تقدير).

ولكن وحدات يتم استيراد سوى مرة واحدة على أي حال (ثم وضعه في a، b، و مساحات الأسماء c)، لذلك لا داعي للقلق حول استخدام الكثير من الذاكرة أو شيء من هذا القبيل.

ويمكنك بالطبع وضعها في وحدة منفصلة واستيراد <م> أن إلى كل a، b، وc، ولكن هذه الوحدة منفصلة لا يزال من الضروري أن يكون في كل المستوردة.

نصائح أخرى

ويمكنك القيام بذلك باستخدام ملف مشترك مثل include.py، لكنه يذهب ضد الممارسات الموصى بها لأنها تنطوي على استيراد البدل. النظر في الملفات التالية:

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

والآن، في a.py، وما إلى ذلك، القيام به:

from include import *

وكما ذكر أعلاه، فإنه لا ينصح لأن بالإحباط واردات البدل.

نعم ، ولكن لا تفعل ذلك.بجد لا.ولكن إذا كنت لا تزال تريد أن تعرف كيف تفعل ذلك, انها تريد ان تبدو مثل هذا:

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

أقول لا تفعل ذلك ليس فقط لأنه الفوضى والعبث ، ولكن أيضا لأن الحزمة الخاصة بك ليس من المفترض أن تستخدم __init__.py مثل هذا.هذا هو حزمة رمز التهيئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top