Python方法:返回数据与在属性中存储数据

Python方法:返回数据与在属性中存储数据,python,class,validation,design-principles,Python,Class,Validation,Design Principles,这可能是一个一般的编程问题,而不是特定于Python的问题,但是,当涉及到验证类时,最佳实践是什么 我的第一种方法是让方法返回字典: class Validator(): def scene(self): # Do validations here return {'result': True, 'data' my_data, 'external_references': my_references} def character(self):

这可能是一个一般的编程问题,而不是特定于Python的问题,但是,当涉及到验证类时,最佳实践是什么

我的第一种方法是让方法返回字典:

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
或者我应该同时使用这两种方法来充分利用这两个世界

这两个例子都很好,但是我想知道这是否是验证类应该使用的常规方法。对不起,如果答案太明显,但我在这里学习。提前谢谢。

好的, 如果有更大的数据块要返回和重用,那么我建议使用第二种方法,因为在这种情况下,您仅引用存储在某处的数据,而在第一种情况下,您还必须将返回值复制到新变量中,对于更大的值,这可能会降低程序的速度。第二种方法还提供了封装,这对安全性和可读性总是有好处的,因此我的建议是:

尽可能使用类


我还建议为您谈论的“验证”编写单独的测试方法,原因与前面相同。

这实际上取决于您计划如何使用它。如果您打算继续使用
v
,但再也不会使用
v.scene\u result
,那么它可能不算作验证器状态,但是作为
v.scene
的返回值。这可能不是解决这个问题的最佳论坛…@Joran Beasley什么是解决这个问题的合适论坛?可能是codereview.stackexchange.com