作为元组的类的对象变量

时间:2016-06-18 09:22:08

标签: python class python-3.x object initialization

我正在尝试定义一个类的对象变量,以便它是一个元组,如下所示:

class MyClass(object):
    def __init__(self):
        self.results = ? # tuple

    def generate_results(self, a):
        # tuple to hold the 3 result integers
        self.results = (self.calculate_first_result(a),  
                        self.calculate_second_result(a),
                        self.calculate_third_result(a))

calculate_first_resultcalculate_second_resultcalculate_third_resultMyClass的静态方法,执行某些计算并返回int

我不明白应该如何定义self.results __init__,以便它保存带有3个整数的元组,因为它是在{{1}中计算的方法。

我是Python中的类和对象变量概念的新手,因此我的设计和方法中的任何缺点都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

您可以选择代码:

def __init__(self):
        self.results = ()

如果我仅根据您的代码判断,我可能会说这不重要,因为在generate_results()内你覆盖了self.results

如果您需要对程序中的其他需求进行跟踪,则仅初始化空元组非常有用,否则不会。

以下代码总结了我所说的内容:

class Begueradj:
   def __init__(self):       
       self.results = ()       

   def generate_results(self):
       self.results = (1,2,3) 
       print ' inside generate_results():    '+str(self.results)

   def display(self):
       print ' inside display():    '+str(self.results)


# Main program starts here   
if __name__ =='__main__':

   b = Begueradj()
   b.display() # This line will not work if you do not run self.results = () inside __init__()
   b.generate_results()
   b.display()

如果您不需要跟踪self.results,在我们的代码示例中意味着您不需要在display()方法之前调用generate_results(),那么这将引导我们 @ juanpa.arrivillaga 评论你:我的意思是,初始化空元组会变得毫无用处。下面的代码反映了这种情况:

class Begueradj:
   def __init__(self): 
       # Do not do anything
       # We do not need to keep a track of self.results      
       pass       

   def generate_results(self):
       self.results = (1,2,3) 
       print ' inside generate_results():    '+str(self.results)

   def display(self):
       print ' inside display():    '+str(self.results)


# Main program starts here   
if __name__ =='__main__':

   b = Begueradj()
   # b.display() you can no longer call display() here as we did not initialize self.results inside __init__
   b.generate_results()
   b.display()