鱼C论坛

 找回密码
 立即注册
查看: 1495|回复: 1

[已解决]关于小甲鱼老师写的44课简单定制的动手2题的参考代码的疑问

[复制链接]
发表于 2017-8-30 18:30:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小六12 于 2017-8-30 19:41 编辑
  1. import time as t
  2. class Mytimer():

  3.     #初始化需要的实例变量
  4.     def __init__(self,func,number=1000000:
  5.         self.unit=['年','月','天','小时','分','秒']
  6.         self.prompt='未开始计时'
  7.         self.lasted=0.0
  8.         self.func=func
  9.         self.number=number
  10.         self.default_timer=t.perf_counter
  11.         
  12.      #重载__str__(self)魔法方法         
  13.     def __str__(self):
  14.         return self.prompt
  15.     __repr__=__str__
  16.    
  17.     def __add__(self,other):
  18.         
  19.         
  20.         
  21.         result=self.lasted+other.lasted
  22.         prompt='总共运行了%0.2f秒'%result
  23.         return prompt
  24.             
  25.         
  26.    
  27.     #统计函数运行时间,要在shell中输入实例变量名.timing()才会进行统计
  28.     def timing(self):
  29.         self.begin=self.default_timer()
  30.         for i in range(self.number):
  31.             self.func()[color=Red]#可问题是为什么类中明明没有定义func()却也能够运行。[/color]
  32.             self.end=self.default_timer()
  33.             self.lasted=self.end-self.begin
  34.             self.prompt='总共运行了%0.2f秒'%self.lasted
  35.     #设置计时器(time.perf_counter()或time.process_time())      
  36.     def set_timer(self,timer):
  37.         if  timer=='process_time':
  38.             self.default_timer=t.process_time
  39.         elif timer=='perf_counter':
  40.             
  41.             self.defaultimer=t.perf_counter
  42.         else:
  43.             print('输入无效,请输入perf_counter或process_time')
  44.         
复制代码

这个类中定义的timing()方法是可以计算函数的运行时间,疑问是:self.func()这个,我的理解应该算是没有定义为类方法,只在def timing(self):中出现的,为什么可以在执行实例变量名.timing()时运行?不该是报错AttributeError吗?
最佳答案
2017-8-30 19:53:39
本帖最后由 向西而笑 于 2017-8-30 19:55 编辑

在def __init__()的时候传入了一个func,这个func就是一个函数对象,然后就可以func()执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-30 19:53:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 向西而笑 于 2017-8-30 19:55 编辑

在def __init__()的时候传入了一个func,这个func就是一个函数对象,然后就可以func()执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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