为什么我可以
class MyApp(App):
def build(self):
return Label(text="Hello World")
MyApp().run()
而不是
instance = MyApp()
instance.run()
我对OOP相当新,当我看到以第一个代码片段的方式编写的内容时,我感到非常困惑。这有什么原因让人觉得这么常见吗?
两者之间是否存在功能差异?
答案 0 :(得分:4)
你在第一个代码块中基本上和第二个代码块做同样的事情。 区别在于,在第一个中,您无法再次重用实例化的MyApp()类。
在第二个示例中,您定义了一个可以重用的对象。
修改强>
正如@arekolek所说:
如果使用MyApp.run()而不是将其分配给变量, Python将在方法run()的调用完成后立即释放对象占用的内存。 < / p>
p.s:我不是python的专业人员可能会弄错......
答案 1 :(得分:0)
它不仅仅是无法重用实例化的MyApp()
对象。
使用MyApp.run()
而不是将其分配给变量,只要run()
调用完成,Python就可以释放对象占用的内存。
在第二个示例中,如果要释放内存,则需要手动del instance
。离开已定义instance
的块后,内存也将被释放。例如:
def foo():
instance = MyApp()
instance.run()
foo()
# Memory freed automatically
instance = MyApp()
instance.run()
del instance
MyApp().run() # No need to clean-up