سؤال

ولدي فئة في وحدة نمطية أنا الذي يقرأ ملف بليست (XML) وإرجاع ديكت. هذا أمر مريح للغاية لأنني لا أستطيع أن أقول شيئا مثل:

Data.ServerNow.Property().DefaultChart

وهذا ما يعيد القاموس الممتلكات، وعلى وجه التحديد قيمة DefaultChart. أنيقة جدا. ومع ذلك، وتجميع قاموس بهذه الطريقة فشل:

dict={'Data': 'text1', 'Name':'text2', 'Place':'text3]}

وdict يبدو تماما مثل ديكت PLIST. ولكن عندما أقول

print TextNow.Data().Name

وأحصل على الخطأ

 'dict' object has no attribute 'Name'

ولكن إذا قلت

print TextNow.Data()['Name']

وفجأة يعمل!

ويمكن للشخص أن يفسر هذا السلوك؟ هل هناك طريقة لتحويل ديكت إلى ديكت-XML العش؟

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

المحلول

ويمكنك استخدام إعادة تعريف getattr لعلاج مفاتيح القاموس كما سمات، منها مثلا:

class xmldict(dict):
    def __getattr__(self, attr):
        try:
            return object.__getattribute__(self, attr)
        except AttributeError:
            if attr in self:
                return self[attr]
            else:
                raise

وهكذا، على سبيل المثال، إذا سيكون لديك التالية ديكت:

dict_ = {'a':'some text'}

ويمكنك القيام بذلك:

>> print xmldict(dict_).a
some text
>> print xmldict(dict_).NonExistent
Traceback (most recent call last):
  ...
AttributeError: 'xmldict' object has no attribute 'NonExistent'

نصائح أخرى

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

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