Python中为何可通过对象调用静态方法?新手技术疑问求解
关于Python静态方法调用的疑问解答
嘿,我完全懂你的困惑!很多刚上手Python的小伙伴都会误以为静态方法只能通过类名调用,但其实Python在这方面的设计比你想的更灵活~
你测试时能通过对象调用静态方法,是因为Python会自动帮你“转发”这个调用:当你用实例(也就是objName)去调用静态方法时,Python会忽略掉实例本身,直接把请求转交给对应的类来执行这个静态方法。本质上,objName.StaticMethodName()和ClassName.StaticMethodName()的执行效果是完全一样的,这只是Python提供的一个语法糖,方便你在已经持有实例的情况下不用特意去写类名。
对了,你的代码里好像漏了@staticmethod装饰器哦(不然那就是个普通实例方法,调用时会因为缺少self参数报错),我补全后大概是这样:
class Parent: def __init__(self): print 'Parent Class Constructor' @staticmethod def ParentStaticMethod(): print 'Parent Static Method' # 测试调用 obj = Parent() obj.ParentStaticMethod() # 确实能成功执行
这种设计其实挺实用的,比如当你在某个实例方法里想调用同一个类的静态方法时,直接用self.静态方法名()就可以,不用硬写类名,后期如果类名需要修改,也不用到处去调整调用代码~
内容的提问来源于stack exchange,提问作者Aadi
相关产品推荐
相关产品推荐

