سؤال

عند تحديد سمات الفصل من خلال الأسماء "المحسوبة"، كما في:

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 لهذا الغرض؟

الدفع السؤال 100003: ما هي metaclass في بيثون؟.

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