
今天突然开始纠结起了一个奇怪的问题了
# Python code class A(): def __init__(self, args): self.args = self._init_args(args) def _init_args(self, args): # do something return args a = A(["test", "question"]) 这样的逻辑在 Python 中是可以正确的运行的,但是却很奇怪
理论上来说,在__init__过程中,对象 A 的实例 a 还没有实例化完成.但是上边的代码在 a 的实例化尚未完成时就已经调用了实例 a 的方法_init_args 了,这样做是否有一些隐患?是什么机制使 Python 可以这样处理的?
1 fy 2017-08-04 10:44:28 +08:00 不,__init__是实例化完成后调用的。 |
2 stebest 2017-08-04 10:47:16 +08:00 只有实例化后才会调用__init__,不实例化是不会执行的。 |
3 yang3yen 2017-08-04 10:48:22 +08:00 class A 的实例 a 是在__new__中创建的,__init__只是用来给新创建的对象 a 赋值 |
4 scriptB0y 2017-08-04 10:48:31 +08:00 理论上来说,在__init__过程中,对象 A 的实例 a 还没有实例化完成 第一句就错了 |
5 zhengxiaowai 2017-08-04 10:48:34 +08:00 __new__ 是创建实例 __init__ 是初始化实例 |
6 eloah OP 谢谢各位 看来自己还不够扎实啊,噗 |
7 Kilerd 2017-08-04 11:26:48 +08:00 python 中的所谓 initialization 包括两个部分 __new__ __init__ |