我在Python中编写了一个函数,它应该与Java中的工厂类似,因为它为给定的参数实例化了正确的类并返回了这个实例。
在函数中只有一个类的最小示例是:
def create_object(param):
class SpecialClass(ParentClass):
def func(self, param):
doSomething()
class_instance = SpecialClass(param)
return class_instance
当我从外面调用这个函数时,我可以完美地使用这个对象。来自Java背景,我认为这与Python中的动态类型有关,但我仍然不确定为什么这实际上有效。是不是在函数本身内知道该类的范围?
答案 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()
方法。