返回函数内部 class 的 Python 对象实例
Returning a Python object instance of an inner class of a function
我在 Python 中编写了一个函数,它的工作方式应该类似于 Java 中的工厂,因为它实例化了给定参数的正确 class 和 [=26= 】 这个实例。
函数内部只有一个 class 的最小示例是这样的:
def create_object(param):
class SpecialClass(ParentClass):
def func(self, param):
doSomething()
class_instance = SpecialClass(param)
return class_instance
当我从外部调用这个函数时,我可以完美地使用这个对象。来自 Java 背景,我认为这与 Python 中的动态输入有关,但我仍然不确定为什么这实际上有效。 class 的作用域不是只在函数本身内已知吗?
为了回答您的问题,您已经 return 编辑了一个对象,并且 Python 将允许您使用它,而不管原始 class 是在哪里定义的。 Python 中没有私有 classes 并且函数本身是对象,所以基本上当您 return 对象时,该函数之外的所有对象都将该对象视为 [=10= 的实例].
实际上,虽然工厂不是您在 Python 中制造的东西。您应该使用 class 方法,它只是 return class 的一个实例。您可以在这里阅读更多相关信息:https://docs.python.org/3/library/functions.html#classmethod
如果您感到困惑,请 google python classmethod decorator
Whosebug 上有一些关于如何使用它们的很好的解释。
请原谅我的糟糕 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();
}
}
这里主要 class 我引用了 class InnerClass 的对象,而 class 从未在范围内,我可以成功调用它的 foo()
方法。
我在 Python 中编写了一个函数,它的工作方式应该类似于 Java 中的工厂,因为它实例化了给定参数的正确 class 和 [=26= 】 这个实例。
函数内部只有一个 class 的最小示例是这样的:
def create_object(param):
class SpecialClass(ParentClass):
def func(self, param):
doSomething()
class_instance = SpecialClass(param)
return class_instance
当我从外部调用这个函数时,我可以完美地使用这个对象。来自 Java 背景,我认为这与 Python 中的动态输入有关,但我仍然不确定为什么这实际上有效。 class 的作用域不是只在函数本身内已知吗?
为了回答您的问题,您已经 return 编辑了一个对象,并且 Python 将允许您使用它,而不管原始 class 是在哪里定义的。 Python 中没有私有 classes 并且函数本身是对象,所以基本上当您 return 对象时,该函数之外的所有对象都将该对象视为 [=10= 的实例].
实际上,虽然工厂不是您在 Python 中制造的东西。您应该使用 class 方法,它只是 return class 的一个实例。您可以在这里阅读更多相关信息:https://docs.python.org/3/library/functions.html#classmethod
如果您感到困惑,请 google python classmethod decorator
Whosebug 上有一些关于如何使用它们的很好的解释。
请原谅我的糟糕 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();
}
}
这里主要 class 我引用了 class InnerClass 的对象,而 class 从未在范围内,我可以成功调用它的 foo()
方法。