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