سمات الطبقة مع اسم "محسوب"
-
06-09-2019 - |
سؤال
عند تحديد سمات الفصل من خلال الأسماء "المحسوبة"، كما في:
class C(object):
for name in (....):
exec("%s = ..." % (name,...))
هل هناك طريقة مختلفة لمعالجة تعريفات السمة العديدة من خلال استخدام Exec؟ GetAttr (C، الاسم) لا يعمل لأن C غير محدد، أثناء إنشاء الفئة ...
المحلول
ماذا عن:
class C(object):
blah blah
for name in (...):
setattr(C, name, "....")
وهذا هو وضع إعداد السمة بعد التعريف.
نصائح أخرى
class C (object):
pass
c = C()
c.__dict__['foo'] = 42
c.foo # returns 42
إذا كانت صفك بالكامل "محسوبة"، فهل يمكنني اقتراح type
قابل للاستدعاء. هذا مفيد بشكل خاص إذا كانت الحاويات الأصلية هي DCT:
d = dict(('member-%d' % k, k*100) for k in range(10))
C = type('C', (), d)
هذا من شأنه أن يمنحك نفس النتائج
class C(object):
member-0 = 0
member-1 = 100
...
إذا كانت احتياجاتك معقدة حقا، ففكر في metaclasses. (حقيقة، type
يكون metaclass =)
ماذا عن استخدام metaclasses لهذا الغرض؟
لا تنتمي إلى StackOverflow