返回函数内部类的Python对象实例

时间:2017-07-07 12:32:39

标签: python inner-classes

我在Python中编写了一个函数,它应该与Java中的工厂类似,因为它为给定的参数实例化了正确的类并返回了这个实例。

在函数中只有一个类的最小示例是:

def create_object(param):

    class SpecialClass(ParentClass):
        def func(self, param):
            doSomething()

    class_instance = SpecialClass(param)
    return class_instance

当我从外面调用这个函数时,我可以完美地使用这个对象。来自Java背景,我认为这与Python中的动态类型有关,但我仍然不确定为什么这实际上有效。是不是在函数本身内知道该类的范围?

2 个答案:

答案 0 :(得分:3)

要回答你的问题,你已经返回了一个对象,无论原始类的定义在哪里,Python都会让你使用它。 Python中没有私有类,函数本身就是对象,所以基本上当你返回对象时,该函数之外的所有东西都将对象视为create_object.SpecialClass的实例。

在实践中虽然工厂不是你用Python制作的东西。您应该使用一个只返回该类实例的类方法。您可以在此处详细了解:https://docs.python.org/3/library/functions.html#classmethod

如果您对谷歌python classmethod decorator感到困惑,并且有一些很好的Stackoverflow说明如何使用它们。

答案 1 :(得分:-2)

请原谅我糟糕的Java,但我无法看到你的Python代码与此有何不同:

class NestedScope {
    public static void main(String[] args) {
      OuterClass oc = new OuterClass();
      oc.bar().foo();
    }
}

class OuterClass {
  class InnerClass {
    public void foo() {
        System.out.println("in here");
    }
  }
  public InnerClass bar() {
    return new InnerClass();
  }
}

这里在主类中我引用了类InnerClass的对象,而没有该类在范围内,我可以成功调用它的foo()方法。