2

最後のいくつかの弱点、私は Web.py フレームワークで少し遊んでいます。アプリケーションがどんどん大きくなってきているので、ソースコードを再構築し、コードの一部を別のクラスに配置したいと考えています。さて、別の web.py クラスでオブジェクト インスタンスが必要な場合、どこにオブジェクト インスタンスを作成すればよいかわかりません。私のソースコードは次のようになります。

import web
import myclass

urls = (
    '/', 'index',
    '/test', 'test'
)

#should i make my instance global...
my = myclass.myClass()

class test:
    def __init__(self):
        #...or should i make my instance local: my = myclass.myClass() 
        pass

    def GET(self):
        item = my.getItem()
        return item

    def POST(self):
        pass

class index:
   def __init__(self):
       #...or should i make my instance local: my = myclass.myClass() 
       pass

    def GET(self):
        date = my.getDate()
        return date

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

ここで、Web ブラウザーの適切なサイトが呼び出された場合に、(インスタンスに属する) メソッドgetItem()にアクセスしたいと考えています。私の質問は次のとおりです。インスタンスをグローバルにする必要がありますか、それともローカルにした方が良いですか? 私はグローバル インスタンスが本当に好きではありませんが、それをグローバルにする方法は他にありません。確かに、ローカル インスタンスを作成することは可能ですが、その場合、ページが読み込まれるたびに新しいインスタンスが作成されますよね? 通常、これは問題にはなりませんが、シリアル ポートにアクセスするため、インスタンスが 1 つだけ作成されるようにする必要があります。getDate()mymyclass

何か不足していますか、それともグローバル インスタンスがこれを達成するための唯一の解決策ですか?

4

1 に答える 1

1

いくつかの調査の後、グローバルインスタンスがここに行く方法であるという結論に達しました。ただし、グローバル インスタンスを web.py 自動リロード モードと一緒に使用する場合は注意が必要です。自動再読み込みモードでは、新しいページが読み込まれるたびにグローバル インスタンスが作成されます。それを避けたい場合は、次のようなものを使用する必要があります。

import web
import serial

urls = ("/(.*)", "test"
       ) 

web.config.debug = True

if(web.config.debug): 
    #in debug mode, make sure that global serial instance is only created at start up
    if not hasattr(serObj, "_email"):
        serObj = serial.Serial(0, 9600, parity=serial.PARITY_NONE) 
        web._serObj = serObj
    else:
        serObj = web._serObj  

class test:
    def GET(self):
        return "Test"

    def POST(self):
        pass

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()
于 2013-10-06T18:54:48.990 に答える