2011-06-19 11 views
2

リモートストア上のオブジェクトを管理するためのコードを使用しているため、ストアからの読み取り結果としてオブジェクトを作成することも、ストアに送信されるオブジェクトを作成することもできます。作成時間。実際の目標は、リモートストア上のオブジェクトの表現が存在する場合にのみオブジェクトを作成することです。リモートストアに表現がない場合、オブジェクトは作成されません。classmethodを自己作成オブジェクトコンストラクタとして

class myClass: 
    def __init__(self, parameter1, parameter2) 
    self.param1 = parameter1 
    self.param2 = parameter2 

    @classmethod 
    def create(parameter1, parameter2): 
    if SendToRemoteStore(parameter1, parameter2) == True: 
     return myClass(parameter1, parameter2) 
    else: 
     return None 

    def __del__(): 
    DeleteFromRemoteStore(self) 

# Two ways to create an instance 
# As the result of a remote read: 
data = GetFromRemoteStore() 
object1 = myClass(data['foo'], data['bar']) 

# Or if I'm creating the object here and 
# need to save it to store on creation: 
object2 = myClass.create('baz', 'bar') 
+4

ここで質問がありますか? –

+2

また、関連するものについては '__del__'に依存しないでください。オブジェクトの処理が完了したら明示的に処理してください。おそらく、[コンテキストマネージャ](http://www.doughellmann.com/PyMOTW/contextlib/)を何かが正常に処理されなかった場合、 '__del__'に警告を出します。 – delnan

+0

Heh、私は何とか質問の質問部分をやめました - 本当に "これは間違っていますか?" – caw

答えて

1

不要です。

class myClass(object): 
    def __new__(cls, parameter1, parameter2): 
    if SendToRemoteStore(parameter1, parameter2): 
     return super(myClass, cls).__new__(cls) 
    else: 
     return None 

    def __init__(self, parameter1, parameter2): 
    self.param1 = parameter1 
    self.param2 = parameter2 

    def __del__(self): 
    DeleteFromRemoteStore(self) 
+0

'else'節は必要ありません。 – Robin

+1

@Robin:「明示的なものは暗黙的なものよりも優れています。 –

+1

私は '__new__'から' None'を返すことがあなたが望むことをするかどうかはわかりません。 – doublep

関連する問題