是否首选在文件的开头或类的方法内实例化对象?例如:
# start of file
foo = Foo()
class Bar(object):
def bar(self):
foo.some_method()
或
# start of file
class Bar(object):
def bar(self):
foo = Foo()
foo.some_method()
是否有性能差异?
答案 0 :(得分:1)
让我们从此开始,一次提升Foo()
一个级别:
class Bar(object):
def bar(self):
foo = Foo()
foo.some_method()
每次调用方法时都会创建Foo
。只有方法体只存在Foo
。
class Bar(object):
def __init__(self):
self.foo = Foo()
def bar(self):
self.foo.some_method()
每次创建Foo
时,这会创建一次Bar
。只要Foo
创建Bar
,class Bar(object):
def __init__(self):
self.foo = None
def bar(self):
if self.foo is None:
self.foo = Foo()
self.foo.some_method()
就会存在。
Foo
这是先前的变体,仅在调用bar
方法时创建None
。可以使用属性隐藏foo
的{{1}}状态。
foo = Foo()
class Bar(object):
def bar(self):
foo.some_method()
这只会创建一次Foo
,然后重复使用。 Foo
存在,直到程序退出。
这些都不是优选的,每个都有自己的适用时刻。