用描述符实现classmethod方法和staticmethod方法
1. @classmethod
class ClassMethod: def __init__(self, func): self.func = func def __get__(self, instance, owner): """ 类来调用,instance为None,owner为类本身。 实例来调用,instance为实例,owner为类本身。 :param instance: :param owner: :return: """ def feedback(*args, **kwargs): return self.func(owner, *args, **kwargs) return feedback class People: name = 'edward' @ClassMethod def say_hi(cls, msg): print(f'你好{cls.name},{msg}') People.say_hi('你好帅')
2. @staticmethod
class StaticMethod: def __init__(self, func): self.func = func def __get__(self, instance, owner): def feedback(*args, **kwargs): return self.func(*args, **kwargs) return feedback class People: name = 'edward' @StaticMethod def say_hi(x, y, z): # say_hi = StaticMethod(say_hi) print('------>', x, y, z) People.say_hi(1, 2, 3)