هل من المقبول فحص الخصائص التي تبدأ بالشرطة السفلية؟

StackOverflow https://stackoverflow.com/questions/152068

  •  02-07-2019
  •  | 
  •  

سؤال

لقد كنت أعمل على مولد بسيط جدًا للأبراج.لقد توصلت إلى شيء يتفقد

SomeClass._sa_class_manager.mapper.c

هل من المقبول فحص هذا (أو استدعاء الأساليب التي تبدأ بالشرطة السفلية)؟لقد افترضت دائمًا أن هذا أمر قانوني على الرغم من الاستياء منه لأنه يعتمد بشكل كبير على البنية الداخلية للفئة/الكائن.ولكن مهلا، نظرًا لأن لغة python لا تحتوي بالفعل على واجهات بمعنى Java، فربما يكون الأمر على ما يرام.

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

المحلول

من المتعمد (في بايثون) عدم وجود نطاقات "خاصة".من المتعارف عليه أن أي شيء يبدأ بشرطة سفلية لا ينبغي استخدامه بشكل مثالي، وبالتالي لا يجوز لك الشكوى إذا تغير سلوكه أو تعريفه في الإصدار التالي.

نصائح أخرى

بشكل عام، يشير هذا عادةً إلى أن الطريقة داخلية فعليًا، وليست جزءًا من الواجهة الموثقة، ولا ينبغي الاعتماد عليها.تتمتع الإصدارات المستقبلية من المكتبة بحرية إعادة تسمية هذه الأساليب أو إزالتها، لذا إذا كنت تهتم بالتوافق المستقبلي دون الحاجة إلى إعادة الكتابة، فتجنب القيام بذلك.

إذا كان يعمل، لماذا لا؟من الممكن أن تواجه مشاكل عندما تتم إعادة هيكلة _sa_class_manager، أو ربط نفسك بهذا الإصدار المحدد من SQLAlchemy، أو إنشاء المزيد من العمل لتتبع التغييرات.نظرًا لأن SQLAlchemy هو هدف سريع الحركة، فقد تكون هناك خلال عام بالفعل.

الطريقة المفضلة هي دمج واجهة برمجة التطبيقات (API) المطلوبة في SQLAlchemy نفسها.

إنها ليست فكرة جيدة بشكل عام، للأسباب التي سبق ذكرها.ومع ذلك، تسمح بايثون عمدًا بهذا السلوك في حالة عدم وجود طريقة أخرى لفعل شيء ما.

على سبيل المثال، إذا كان لديك مكتبة Python مجمعة ومغلقة المصدر حيث لا يعتقد المؤلف أنك ستحتاج إلى الوصول المباشر إلى الحالة الداخلية لكائن معين - ولكنك تفعل ذلك بالفعل - فلا يزال بإمكانك الحصول على المعلومات التي تحتاجها.لديك نفس المشكلات المذكورة سابقًا فيما يتعلق بمواكبة الإصدارات المختلفة (إذا كنت محظوظًا بما يكفي لاستمرار صيانتها) ولكن على الأقل يمكنك فعل ما تريد القيام به.

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