鱼C论坛

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

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

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

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

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

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

    #初始化需要的实例变量
    def __init__(self,func,number=1000000:
        self.unit=['年','月','天','小时','分','秒']
        self.prompt='未开始计时'
        self.lasted=0.0
        self.func=func
        self.number=number
        self.default_timer=t.perf_counter
        
     #重载__str__(self)魔法方法         
    def __str__(self):
        return self.prompt
    __repr__=__str__
    
    def __add__(self,other):
        
        
        
        result=self.lasted+other.lasted
        prompt='总共运行了%0.2f秒'%result
        return prompt
            
        
    
    #统计函数运行时间,要在shell中输入实例变量名.timing()才会进行统计
    def timing(self):
        self.begin=self.default_timer()
        for i in range(self.number):
            self.func()#可问题是为什么类中明明没有定义func()却也能够运行。
            self.end=self.default_timer()
            self.lasted=self.end-self.begin
            self.prompt='总共运行了%0.2f秒'%self.lasted
    #设置计时器(time.perf_counter()或time.process_time())       
    def set_timer(self,timer):
        if  timer=='process_time':
            self.default_timer=t.process_time
        elif timer=='perf_counter':
            
            self.defaultimer=t.perf_counter
        else:
            print('输入无效,请输入perf_counter或process_time')
        
这个类中定义的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-12-22 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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