V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ry_wang
V2EX  ›  Python

__init__使用疑惑

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

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

    <script src="git://gist.github.com/2214826.git"></script>
    ayanamist
        6
    ayanamist  
       2012-03-27 20:37:22 +08:00
    rexren
        7
    rexren  
       2012-05-11 01:42:05 +08:00
    差不多就是factory pattern的思路
    phuslu
        8
    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()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:39 · PVG 22:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.