在文件的开头或方法内部的Python对象实例化?

时间:2017-08-10 03:35:06

标签: python oop

是否首选在文件的开头或类的方法内实例化对象?例如:

# 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()

是否有性能差异?

1 个答案:

答案 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创建Barclass 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存在,直到程序退出。

这些都不是优选的,每个都有自己的适用时刻。