gpt4 book ai didi

Python:调用方法 'directly' 是否实例化对象?

转载 作者:太空狗 更新时间:2023-10-29 19:32:33 24 4
gpt4 key购买 nike

我是 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()

关于Python:调用方法 'directly' 是否实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com