2014-11-25 48 views
0

這可能是一個普通的編程問題,而不是Python特定的問題,但是,驗證類的最佳做法是什麼?Python方法:返回數據vs將數據存儲在屬性中

我的第一種方法是有方法返回一個字典:

class Validator(): 
    def scene(self): 
     # Do validations here 
     return {'result': True, 'data' my_data, 'external_references': my_references} 
    def character(self): 
     # Do validations here 
     return {'result': True, 'data' my_data, 'external_references': my_references} 
# Usage 
v = Validator() 
scene_results = v.scene() 
character_results = v.character() 
if scene_results['result']: 
    print "Scene Validation Succesful!" 
    print "Data:", scene_results['data'], ", Files:", scene_results['external_references'] 
if character_results['result']: 
    print "Character Validation Succesful!" 
    print "Data:", character_results['data'], ", Files:", character_results['external_references'] 

我的第二個方法是將填充類屬性來代替:

class Validator(): 
    def __init__(self): 
     self.scene_result = None 
     self.scene_data = None 
     self.scene_external_references = None 
     self.character_result = None 
     self.character_data = None 
     self.character_external_references = None 
    def scene(self): 
     ## Do validations here 
     self.scene_result = True 
     self.scene_data = my_data 
     self.scene_external_references = my_references 
     # Won't return the values 
    def character(self): 
     # Do validations here 
     self.scene_result = True 
     self.scene_data = my_data 
     self.scene_external_references = my_references 
     # Won't return the values 
# Usage 
v = Validator() 
v.scene() 
v.character() 
if v.scene_result: 
    print "Scene Validation Succesful!" 
    print "Data:", v.scene_data, ", Files:", v.scene_external_references 
if v.character_result: 
    print "Character Validation Succesful!" 
    print "Data:", v.character_data, ", Files:", v.character_external_references 

或者我應該使用這兩種方法,以獲得最佳兩個世界?

這兩個例子都可以正常工作,但是我想知道這是驗證類應該工作的傳統方式。對不起,如果答案太明顯,但我在這裏學習。提前致謝。

+0

這實際上取決於你打算如何使用它。如果你要繼續使用'v',但你永遠不會再使用'v.scene_result',那麼它可能不會被視爲驗證器狀態,而是作爲'v.scene'的返回值。 – abarnert 2014-11-25 00:36:56

+0

這可能不是這個問題的最佳論壇... – 2014-11-25 00:54:05

+0

@Joran Beasley這個問題的適當論壇是什麼? – 2014-11-25 01:00:22

回答

0

那麼, 如果有更大的數據塊要返回和重用,那麼我建議第二種方法,因爲在這種情況下,你只是引用存儲的數據,而在第一種情況下,你還必須複製返回值變成一個新的變量,對於較大的值可能會減慢程序的速度。第二種方法還提供了對安全性和可讀性總是有好處的外殼,所以我的建議聽起來如此:

儘可能地使用類。

我也建議爲您所談論的「驗證」編寫單獨的測試方法,原因與之前相同。