سؤال

أحاول التحقق من صحة بعض الثعبان الحجج.حتى نحصل على جديد ثابت الكتابة في بيثون 3.0, ما هي أفضل طريقة للذهاب حول هذا.

هنا هو مثال على ما أنا محاولة:

class A(object):
    @accepts(int, int, int)
    def __init__(a, b, c):
        pass

class B(A):
    @accepts(int, int, int, int)
    def __init__(a, b, c, d):
        A.__init__(a, b, c)

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

أساسا أنا أريد أن البوب حجة واحدة قبالة kwargs قائمة التحقق من ذلك النوع ، ثم تمرير ما تبقى إلى الوالدين ، ولكن القيام بذلك بطريقة مرنة جدا ونظيفة الطريقة مثل هذه المقاييس.

أي اقتراحات ؟

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

المحلول

لماذا لا مجرد تعريف any قيمة وتزيين منشئ فئة فرعية مع @accepts(any, any, any, int)?مصمم الديكور لن تحقق المعلمات ملحوظ مع any, ، @accepts على الفائقة منشئ سوف تحقق كل الحجج تمرير ما يصل إليها من قبل الفئات الفرعية.

نصائح أخرى

قد تريد أن تلعب حولها مع inspect وحدة نمطية.وسوف تتيح لك تعداد superclasses ، حجة القوائم وغيرها من الاشياء متعة.يبدو أنك قد ترغب في فحص الحجة قائمة الفائقة __init__ طريقة ومقارنتها ضد ما لديك في فرعية.لست متأكدا إذا كان هذا هو الذهاب إلى العمل بالنسبة لك أم لا.

وأود أن تكون حذرا حول ما الافتراضات التي تقوم على الرغم من.قد لا يكون من الأسلم أن نفترض أن مجرد فئة A N الحجج __init__, وفئات فرعية تحتوي على الأقل N الحجج و تمرير أول N من خلال فئة سوبر.إذا كان فرعية أكثر تحديدا ، ثم قد شغل في كل من 2 من الحجج إلى superclasses __init__ الأسلوب.

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