Python:“直接”调用方法是否实例化对象?

2024-05-14

我是 Python 新手,在对我的对象进行单元测试时,我注意到一些“奇怪”的东西。

class Ape(object):
    def __init__(self):
        print 'ooook'

    def say(self, s):
        print s

def main():
    Ape().say('eeek')

if __name__ == '__main__':
    main()

我写这个小例子是为了说明我感到困惑的地方。如果你执行 Ape().say('eeek') 这实际上会实例化 Ape 对象并运行 init 方法吗?我以为不会,但我有一些奇怪的副作用,所以现在我想它会吗?


如果你想直接调用一个方法而不创建实例,你可以使用staticmethod装饰师。请注意,没有self当你使用静态方法时

class Ape(object):
    def __init__(self):
        print 'ooook'

    @staticmethod
    def say(s):
        print s

def main():
    Ape.say('eeek')

if __name__ == '__main__':
    main()

与类方法进行比较,其中类是第一个参数而不是实例

class Ape(object):
    def __init__(self):
        print 'ooook'

    @classmethod
    def say(cls, s):
        print "the class is:", cls
        print s

def main():
    Ape.say('eeek')

if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:“直接”调用方法是否实例化对象? 的相关文章

随机推荐