在python中的函数内定义本地类是一个坏主意吗?

use*_*473 5 python scope

不久前我正在研究的一个函数具有如下结构:

def function():
    class Inner:
        #class stuff
    #function stuff
Run Code Online (Sandbox Code Playgroud)

Inner只在 中使用和需要function,并且它也不会在函数结束时返回。定义一个本地类是一个坏主意吗?我听说过很多关于它对性能有何不利的事情,因为每次运行该函数时,python 都必须重新编译该类,而且由于我的目标是使用此函数实现性能,所以我有点担心这样做.

Mat*_*vor 9

除了效率低下之外,每个Inner类都是一个全新的对象,因此单独的实例永远不会属于同一类,这在某种程度上违背了类性的要点:

In [4]: def factory():
   ...:     class Inner(object):
   ...:         pass
   ...:     return Inner
   ...:

In [5]: i1 = factory()()

In [6]: i2 = factory()()

In [7]: i1.__class__
Out[7]: __main__.Inner

In [8]: i2.__class__
Out[8]: __main__.Inner

In [9]: i1.__class__ is i2.__class__
Out[9]: False

In [10]: isinstance(i1, i2.__class__)
Out[10]: False
Run Code Online (Sandbox Code Playgroud)

如果每个实例完全独立,这不是问题,但需要注意。

  • 感谢您重申我的上一条评论。 (3认同)