# SPDX-License-Identifier: MIT
class Counter:
    def __init__(self,value):
        self.value=value
    def score(self,amount=1):
        return self.value+amount
    def other(self,amount):
        return self.value-amount
    def remember(self):
        return self.score
class Child(Counter):
    def score(self,amount=1):
        return super().score(amount)+10
    def saved_parent(self):
        return super().score
class Inherited(Counter):
    pass
def apply(callback,value):
    return callback(value)
counter=Counter(10)
original=counter
selected=counter.score
counter=Counter(100)
print(selected(2),counter.score(2),selected.__self__ is original)
print(selected is selected,selected is original.score,selected==original.score,selected!=counter.score)
print(selected==original.other,selected==Counter.score,selected!=None)
print(Counter.score is Counter.score,Inherited.score is Counter.score,Child.score is Counter.score)
print(selected.__func__ is Counter.score,selected.__name__,selected.__module__)
print(type(selected).__name__,type(Counter.score).__name__,Counter.score.__name__)
print(bool(selected),callable(selected),callable(Counter.score),isinstance(selected,object))
print(apply(selected,3),apply(counter.score,3),apply(Child(1).score,3))
print(selected.__func__(selected.__self__,5),Counter.score(original,amount=6))
print(original.remember()(7),[original.score,counter.score][0](8))
print([original.score]==[original.score],original.score in [original.score],original.score in [counter.score])
print(min([4,2,3],key=counter.score),max([4,2,3],key=counter.score))
class Holder:
    def __init__(self,callback):
        self.callback=callback
holder=Holder(original.score)
print(holder.callback(9),holder.callback.__self__ is original)
def make():
    print('receiver')
    return original
def value():
    print('argument')
    return 2
print(apply(make().score,value()))
original.value=20
print(selected(2),holder.callback(3))
child=Child(3)
parent=child.saved_parent()
print(parent(4),parent.__func__ is Counter.score,parent.__self__ is child)
