检查以下我们实现nested classes
with mixed的示例工作代码staticmethods
。
import time
class A:
def __init__(self):
time.sleep(0.1)
def a1(self):
print 'a1'
@staticmethod
def a2():
print 'a2'
class B:
@staticmethod
def b2():
A.a2() #fine.
A().a1() #very bad solution, computation cost is high !!!
@staticmethod
def x():
t = time.clock()
for i in xrange(100):
A.B.b2()
print 'elapsed: %0.1fs'%(time.clock()-t)
用作:
A.B.x()
上述方法可行,但您可能会注意到,对于我们尝试从容器类A().a1()
访问非静态方法的行,计算成本太高。我们通过初始化来强调这一点。所以你明白了,它可以是任何耗时的初始化,这在我们的工作中是必要的,例如。所以我们不相信在上述行中实例化类是一个好的选择。如何不在上面实例化,但要像上面一样完成工作。尽管相关问题包括this和that ,但上述问题已在任何地方得到回答。a1
A
sleep
A
A
A
编辑:
我们对诸如此类的建议不感兴趣why use it
。如上所述,我们感兴趣的问题是如何改进这条线
A().a1()
就这样。
根据大神给出的建议,通过以下方式解决Martijn Pieters
。由于显示了解决方法,我们接受了答案。
class B:
@staticmethod
def b2(Ai):
A.a2() #fine.
if Ai is None: Ai = A()
Ai.a1() #now is fine.
@staticmethod
def x():
t = time.clock()
Ai = A()
for i in xrange(100):
A.B.b2(Ai=Ai)
print 'elapsed: %0.1fs'%(time.clock()-t)
谢谢你。