سؤال

للحصول على جميع سمات الفئة المحددة التي أحاول اتباعها

TheClass.__dict__

ولكن هذا يمنحني أيضًا السمات الخاصة.هل هناك طريقة للحصول على السمات المحددة ذاتيًا فقط أم هل يجب علي "تنظيف" الإملاء بنفسي؟

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

المحلول

حل آخر:

class _BaseA(object):
    _intern = object.__dict__.keys()

class A(_BaseA):
    myattribute = 1

print filter(lambda x: x not in A._intern+['__module__'], A.__dict__.keys())

لا أعتقد أن هذا قوي جدًا وربما لا تزال هناك طريقة أفضل.

يعالج هذا بعض المشكلات الأساسية التي أشارت إليها بعض الإجابات الأخرى:

  • لا حاجة الى 'name convention' التصفية القائمة
  • توفير التنفيذ الخاص بك للأساليب السحرية، على سبيل المثال. __len__ لا توجد مشكلة (حدد في أ).

نصائح أخرى

لا يمكن تنظيف __dict__:

AttributeError: attribute '__dict__' of 'type' objects is not writable

هل يمكن الاعتماد على اصطلاحات تسمية :

class A(object):
    def __init__(self, arg):
        self.arg = arg

    class_attribute = "01"    

print [ a for a in A.__dict__.keys() 
        if not (a.startswith('__') and a.endswith('__')) ]

# => ['class_attribute']

وهذا قد لا تكون موثوقة، حيث يمكنك بالطبع الكتابة أو تنفيذ خاص / السحر طرق مثل __item__ أو __len__ في صفك.

وأنا لا أعتقد أن هناك أي شيء بسيط، ولماذا لن يكون هناك؟ وليس هناك فارق بين القسري لغة السحر وسمات المعرفة من قبل المستخدم.

وحل MYYN للن تعمل إذا كان لديك سمة المعرفة التي تبدأ بحرف '__'. ومع ذلك، فإنه يقترح حلا على أساس الاتفاقيات: إذا كنت تريد أن التأمل الطبقات الخاصة بك، يمكنك تحديد الاتفاقية الخاصة التسمية، وتصفية على أن

وربما لو كنت توضيح الحاجة يمكن أن نجد حلا أفضل.

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