Python 的一个问题

2017-08-04 10:30:58 +08:00
 eloah

今天突然开始纠结起了一个奇怪的问题了

# 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 可以这样处理的?

2456 次点击
所在节点    Python
7 条回复
fy
2017-08-04 10:44:28 +08:00
不,__init__是实例化完成后调用的。
stebest
2017-08-04 10:47:16 +08:00
只有实例化后才会调用__init__,不实例化是不会执行的。
yang3yen
2017-08-04 10:48:22 +08:00
class A 的实例 a 是在__new__中创建的,__init__只是用来给新创建的对象 a 赋值
scriptB0y
2017-08-04 10:48:31 +08:00
理论上来说,在__init__过程中,对象 A 的实例 a 还没有实例化完成

第一句就错了
zhengxiaowai
2017-08-04 10:48:34 +08:00
__new__ 是创建实例
__init__ 是初始化实例
eloah
2017-08-04 10:49:57 +08:00
谢谢各位
看来自己还不够扎实啊,噗
Kilerd
2017-08-04 11:26:48 +08:00
python 中的所谓 initialization 包括两个部分 __new__ __init__

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX