# 描述符是干什么的: 描述符的作用是用来代理另外一个类的属性的(必须把描述符定义成这个类的类属性,不能定义到构造函数中);
# 还有描述器一般结合着装饰器来使用。描述符是可以实现大部分python类特性中的底层魔法,包括@classmethod,@staticmethd,@property
# 甚至是__slots__属性,描述父是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件.
# 例2 :利用描述符原理完成一个自定制@classmethod
class ClassMethod:
def __init__(self, func):
self.func = func
def __get__(self, instance, owner): # 类来调用,instance为None,owner为类本身,实例来调用,instance为实例,owner为类本身,
def feedback():
print('在这里可以加功能啊...')
return self.func(owner)
return feedback
class People:
name = 'linhaifeng'
@ClassMethod # say_hi=ClassMethod(say_hi)
def say_hi(cls):
print('你好啊,帅哥 %s' % cls.name)
People.say_hi()
p1 = People()
p1.say_hi()
# 疑问,类方法如果有参数呢,好说,好说
class ClassMethod:
def __init__(self, func):
self.func = func
def __get__(self, instance, owner): # 类来调用,instance为None,owner为类本身,实例来调用,instance为实例,owner为类本身,
def feedback(*args, **kwargs):
print('在这里可以加功能啊...')
return self.func(owner, *args, **kwargs)
return feedback
class People:
name = 'linhaifeng'
@ClassMethod # say_hi=ClassMethod(say_hi)
def say_hi(cls, msg):
print('你好啊,帅哥 %s %s' % (cls.name, msg))
People.say_hi('你是那偷心的贼')
p1 = People()
p1.say_hi('你是那偷心的贼')