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

Python对象实例化是在文件开头还是在方法内部?,python,oop,Python,Oop,是首选在文件开头实例化对象还是在类的方法内部实例化对象?例如: # start of file foo = Foo() class Bar(object): def bar(self): foo.some_method() 或 还有性能上的差异吗?让我们从这个开始,一次提升一个级别的Foo() class Bar(object): def bar(self): foo = Foo() foo.some_method() 这将在每

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

# start of file
foo = Foo()
class Bar(object):
    def bar(self):
        foo.some_method()


还有性能上的差异吗?

让我们从这个开始,一次提升一个级别的
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
。只要创建它的
,Foo
就存在

class Bar(object):
    def __init__(self):
        self.foo = None
    def bar(self):
        if self.foo is None:
           self.foo = Foo()
        self.foo.some_method()
这是Previor的一个变体,它仅在调用
bar
方法时创建
Foo
。可以使用属性隐藏
foo
None
状态

foo = Foo()
class Bar(object):
    def bar(self):
        foo.some_method()
这只创建一次
Foo
,然后重复使用。在程序退出之前,
Foo
一直存在


所有这些都不是首选的,它们都有自己的适用性

示例中有一个错误,在第二个示例中应该是
def bar(self)
self.foo=foo()
self.foo.some_method()
。这就是你的意思吗?谢谢你的纠正。我已经编辑了定义栏(self)。我不是要保存实例化的对象,请随意告诉我是否有比我所陈述的两个选项更好的方法,但是这两个示例并不相同!在第一个方法中,其他人可以从类Foo调用另一个方法并更改其状态。但在第二个例子中,foo对象每次在bar函数的末尾被销毁,并且在bar函数的开头创建一个新对象。如果在
中添加
self.foo=foo()
foo = Foo()
class Bar(object):
    def bar(self):
        foo.some_method()