class Foo(object):
def __init__(self, text):
self.text = text
@classmethod
def bar(cls):
return None
class hybridmethod:
def __init__(self, f):
self.f = f
def __get__(self, obj, cls=None):
if obj is not None:
return self.f.__get__(obj)
return getattr(super(cls, cls), self.f.__name__).__get__(cls)
class MyFoo(Foo):
@hybridmethod
def bar(self):
return self.text
print(MyFoo.bar()) # outputs None
foo = MyFoo('foo')
print(foo.bar())
Y2xhc3MgRm9vKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCk6CiAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGJhcihjbHMpOgogICAgICAgIHJldHVybiBOb25lCgpjbGFzcyBoeWJyaWRtZXRob2Q6CiAgICBkZWYgX19pbml0X18oc2VsZiwgZik6CiAgICAgICAgc2VsZi5mID0gZgoKICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgY2xzPU5vbmUpOgogICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZi5fX2dldF9fKG9iaikKICAgICAgICByZXR1cm4gZ2V0YXR0cihzdXBlcihjbHMsIGNscyksIHNlbGYuZi5fX25hbWVfXykuX19nZXRfXyhjbHMpCgpjbGFzcyBNeUZvbyhGb28pOgogICAgQGh5YnJpZG1ldGhvZAogICAgZGVmIGJhcihzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi50ZXh0CgpwcmludChNeUZvby5iYXIoKSkgIyBvdXRwdXRzIE5vbmUKZm9vID0gTXlGb28oJ2ZvbycpCnByaW50KGZvby5iYXIoKSk=