احصل على كائن فئة __dict__ بدون سمات خاصة
-
20-09-2019 - |
سؤال
للحصول على جميع سمات الفئة المحددة التي أحاول اتباعها
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 للن تعمل إذا كان لديك سمة المعرفة التي تبدأ بحرف '__'. ومع ذلك، فإنه يقترح حلا على أساس الاتفاقيات: إذا كنت تريد أن التأمل الطبقات الخاصة بك، يمكنك تحديد الاتفاقية الخاصة التسمية، وتصفية على أن
وربما لو كنت توضيح الحاجة يمكن أن نجد حلا أفضل.