Python最佳实践:函数内部的类定义?

时间:2015-12-02 03:55:38

标签: python python-2.7

我处于这样一种情况,即函数返回的结构可能不需要在该函数之外的任何地方使用。但是因为它不是一个简单的值而是一个实际的对象,我想在我的函数中声明一个类,我可以实例化然后返回。

例如:

def CreateSomeFunkyDataStructure():

    class FunkyClass:
        def __init__(self):
            self.var1 = 'Play that funky music white boy.'

        def getFunky(self):
            print 'Play that funky music right.'


    x = FunkyClass()

    return x


o = CreateSomeFunkyDataStructure()

print o.var1
o.getFunky()

我的问题是这是一个好的做法还是坏的做法,因为这只是感觉奇怪。同时在我看来,因为封装的目的是阻止某人访问函数的实现,在这种情况下它可能是非常合适的。如果课程不是程序中任何其他地方所需要的,那么程序的其余部分就没有理由可以访问它。

1 个答案:

答案 0 :(得分:4)

这很糟糕,因为它会造成以下障碍:

  1. 使用isinstance(result, FunkyClass)进行类型检查 此外,调用CreateSomeFunkyDataStructure多个tiems的结果甚至不会是同一类型! (即type(f1) is not type(f2)
  2. 使用map(FunkyClass.getFunky, [funcy1, funcy2])
  3. 静态调用成员
  4. pickle荷兰国际集团
    这要求类在模块范围内可见 - 即使是嵌套类也会导致它被阻塞