2011-06-19 39 views
2

'm使用代碼來管理遠程存儲上的對象,這意味着我可以創建對象作爲從商店讀取的結果,或者創建發送到商店的對象創作時間。這裏的真正目標是僅當遠程存儲上的對象表示存在時才創建對象 - 如果遠程存儲上沒有表示,則不會創建對象。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

呵呵,我不知何故把問題的一部分留下了問題 - 這真的是「我在做錯了嗎?」 – 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

相關問題