سؤال

أريد سلسلة إضافية واحدة السمة ، دعونا نقول ما إذا كنت تريد طباعة باللون الأحمر أو الأخضر.

Subclassing(str) لا يعمل ، كما أنه غير قابل للتغيير.أرى قيمة ، ولكن يمكن أن تكون مزعجة.

يمكن متعددة الإرث المساعدة ؟ أنا لم أستخدم هذا.

وراثة الكائن الوحيد واستخدام النفس.القيمة=str يعني يجب أن تنفذ جميع سلسلة نيس الرسائل (مثل شريط) نفسي.

أو هل هناك طريقة لإعادة توجيه لهم ، مثل روبي missing_method?

أعتقد أن استخدام فئة مستوى القاموس فهرستها من قبل سبيل المثال لتخزين لون يمكن أن تعمل.أيضا قبيحة ؟

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

المحلول

ويمكن أن تكون موروثة شارع إلا إذا كنت تستخدم إصدار الثعبان قديمة جدا، على سبيل المثال:

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True

نصائح أخرى

ربما فئة مخصصة يحتوي على سلسلة من شأنه أن يكون أفضل نهج.هل حقا تحتاج إلى تمرير جميع سلسلة الأساليب من خلال الكامنة السلسلة ؟ لماذا لا تعرض السلسلة عبر خاصية تسمح المستهلكين من الطبقة أن تفعل كل ما ترغب في ذلك ؟

import UserString
class mystr(UserString.MutableString):
   ...

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

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

وأما إذا بيثون واحدة، تمديد البديل قابلة للتغيير من السلسلة. أنا لست على دراية بما فيه الكفاية مع بيثون لمعرفة ما إذا كان يوجد مثل هذا الهيكل.

هل يمكن أن حاول استخدام stringlike حدة في PyPI . وهنا href="http://developer.covenanteyes.com/stringlike-in-python/" مثال .

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