একাধিক উত্তরাধিকারের দৃশ্যের ভিতরে সুরক্ষার সাথে সুপার কল করার জন্য আমি আমার নিজস্ব পদ্ধতি ব্যবহার করি (আমি সমস্ত কোড দিয়েছি)
def safe_super(_class, _inst):
"""safe super call"""
try:
return getattr(super(_class, _inst), _inst.__fname__)
except:
return (lambda *x,**kx: None)
def with_name(function):
def wrap(self, *args, **kwargs):
self.__fname__ = function.__name__
return function(self, *args, **kwargs)
return wrap
নমুনা ব্যবহার:
class A(object):
def __init__():
super(A, self).__init__()
@with_name
def test(self):
print 'called from A\n'
safe_super(A, self)()
class B(object):
def __init__():
super(B, self).__init__()
@with_name
def test(self):
print 'called from B\n'
safe_super(B, self)()
class C(A, B):
def __init__():
super(C, self).__init__()
@with_name
def test(self):
print 'called from C\n'
safe_super(C, self)()
এটি পরীক্ষা:
a = C()
a.test()
আউটপুট:
called from C
called from A
called from B
প্রতিটি @with_name সাজানো পদ্ধতির অভ্যন্তরে আপনি নিজের বর্তমান ফাংশনটির নাম হিসাবে __ fname__ অ্যাক্সেস করতে পারবেন।
traceback
। এমনকি উত্তর এবং মন্তব্যের সময়গুলিও এর পিছনে ফিরে আসে বলে মনে হয় না।