__init__使用疑惑

2012-03-22 23:34:31 +08:00
 ry_wang
现在碰到这么个疑问:
每个类实物初始化时会先进行一个远程的数据调用,此操作会有超时,调用结果作为后面多个类方法的数据源。且此调用每个类实物只能调用一次
请问这种情况此调用操作适合加到哪里?记得有人说过__init__方法下不适合增加此类代码,最好只放置付值类代码。
thanks.
4016 次点击
所在节点    Python
8 条回复
ayanamist
2012-03-23 07:38:20 +08:00
请使用Builder模式,可以满足你的全部需求。
ry_wang
2012-03-23 09:51:19 +08:00
@ayanamist 看来是高端话题了,我去学习下,多谢
ayanamist
2012-03-23 15:26:21 +08:00
@ry_wang 写一个Builder类,初始化出一个Builder类,把所有的初始化参数用方法设定,接着写一个getInstance方法,返回一个数据类。在调用这个方法的时候可以用异常捕获超时,也可以很方便的实现单例保证只调用一次。这个数据类也可以直接传递到下游去使用。
如果初始化参数不复杂,也可以直接用一个类的静态方法。
ry_wang
2012-03-27 18:55:24 +08:00
@ayanamist hi,不知道下面这个是不是你指的思路?

git://gist.github.com/2214826.git
ry_wang
2012-03-27 18:56:22 +08:00
@ayanamist

<script src="git://gist.github.com/2214826.git"></script>
ayanamist
2012-03-27 20:37:22 +08:00
rexren
2012-05-11 01:42:05 +08:00
差不多就是factory pattern的思路
phuslu
2012-05-11 01:51:02 +08:00
额,python标准库的手法一般是这样:
def __init__(self): self._sock = None
def connect(self): self._sock = socket.create_connection(...)
def XXX_method(self): if self._sock is None: 在此raise Exception或者调用self.connect()

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

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

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

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

© 2021 V2EX