鱼C论坛

 找回密码
 立即注册
查看: 3321|回复: 4

[已解决]Python关于修饰符修饰对象(不能为类)的理解疑惑

[复制链接]
发表于 2018-9-27 11:31:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
"Python 的修饰符"“......只可以在模块或类定义内对函数进行修饰,不允许修饰一个类。......” ('小甲鱼'在练习中的注解)。但下面这个例子中,难道不算是在对一个类修饰吗?(Timeslong是一个类名啊。。。)

  1. class Timeslong():
  2.     def __init__(self,func):
  3.         self.f = func
  4.     def __call__(self):
  5.         start = time.clock()
  6.         print('It\'s time starting!')
  7.         self.f()
  8.         print('It\'s time ending!')
  9.         end = time.clock()
  10.         return "It\'s used:%s ."%(end - start)

  11. import time
  12. @Timeslong
  13. def f():
  14.     y = 0
  15.     for i in range(10):
  16.         y = y+i+1
  17.         print(y)
  18.     return y
  19. print(f())
复制代码
最佳答案
2018-9-27 13:54:14
他其实是修饰类里面的__init__函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-27 13:54:14 | 显示全部楼层    本楼为最佳答案   
他其实是修饰类里面的__init__函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-27 14:25:34 | 显示全部楼层
哦。。。虽一时还不能领悟,且按这思路细细去体会,希望自己能早点开惑。谢谢指教。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-27 15:59:48 | 显示全部楼层
一般来说修饰器用方法来实现,也可以用类来实现(上面的例子)
用类来实现修饰器就可以借用类的一些特性来做点特别的东西。

但无论哪种实现方式,被修饰的只能是方法

@Timeslong #这是用类的方式来实现的修饰器
def f(): #这是被修饰的方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-29 16:11:50 | 显示全部楼层
mizai 发表于 2018-9-27 15:59
一般来说修饰器用方法来实现,也可以用类来实现(上面的例子)
用类来实现修饰器就可以借用类的一些特性来 ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 11:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表