我是Python的新手,在单元测试我的对象上的一些方法时,我发现了一些"怪异"的东西.
class Ape(object):
def __init__(self):
print 'ooook'
def say(self, s):
print s
def main():
Ape().say('eeek')
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我写了这个小例子来说明我感到困惑的地方.如果你做Ape().说('eeek')这实际上是实例化一个Ape对象并运行init方法吗?我以为它不会,但我有一些奇怪的副作用,所以现在我在想它呢?
Joh*_*ooy 13
如果要在不创建实例的情况下直接调用方法,可以使用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()
Run Code Online (Sandbox Code Playgroud)
与类方法比较,其中类是第一个参数而不是实例
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()
Run Code Online (Sandbox Code Playgroud)
Dav*_*d Z 11
是的,它确实.这就是Ape():它创建一个新Ape对象,并作为该过程的一部分__init__运行该方法.
在您的示例中,然后调用该say对象的方法.请注意,say如果您没有Ape对象,则无法调用.
| 归档时间: |
|
| 查看次数: |
4243 次 |
| 最近记录: |