मैं str
उपclass करने की कोशिश कर रहा हूं, लेकिन इसकी अपरिवर्तनीयता के कारण कुछ कठिनाइयों का सामना करना पड़ रहा है।विस्तारित पायथन के बिल्टिन स्ट्र
class DerivedClass(str):
def __new__(cls, string):
ob = super(DerivedClass, cls).__new__(cls, string)
return ob
def upper(self):
#overridden, new functionality. Return ob of type DerivedClass. Great.
caps = super(DerivedClass, self).upper()
return DerivedClass(caps + '123')
derived = DerivedClass('a')
print derived.upper() #'A123'
print type(derived.upper()) #<class '__main__.DerivedClass'>
print derived.lower() #'a'
print type(derived.lower()) #<type 'str'>
विरासत में मिला तरीकों है कि किसी भी नई कार्यक्षमता की आवश्यकता नहीं है के लिए, ऐसे derived.lower()
के रूप में, वहाँ एक सरल, pythonic प्रकार DerivedClass
(str
के बजाय) की एक वस्तु लौटने के लिए तरीका है? या मैं मैन्युअल रूप से प्रत्येक str.method() को ओवरराइड कर रहा हूं, जैसा कि मैंने derived.upper()
के साथ किया था?
संपादित करें:
#Any massive flaws in the following?
class DerivedClass(str):
def __new__(cls, string):
ob = super(DerivedClass, cls).__new__(cls, string)
return ob
def upper(self):
caps = super(DerivedClass, self).upper()
return DerivedClass(caps + '123')
def __getattribute__(self, name):
att = super(DerivedClass, self).__getattribute__(name)
if not callable(att):
return att
def call_me_later(*args, **kwargs):
result = att(*args, **kwargs)
if isinstance(result, basestring):
return DerivedClass(result)
return result
return call_me_later
** यह भी देखें: ** http://stackoverflow.com/questions/tagged/python+monkeypatching – dreftymac
** यह भी देखें: ** http://stackoverflow.com/questions/tagged/python+method-missing – dreftymac