2016-06-18 2 views
0

Я пытаюсь определить переменную объект класса таким образом, что это будет кортеж, как показано ниже:переменной объекта класса как кортеж

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_result, calculate_second_result и calculate_third_result статические методы MyClass, которые выполняют некоторые вычисления и возвращают int)

Я не понимаю, как self.results в __init__ должны быть определены для того, чтобы провести Кортеж с 3 целыми числами как он рассчитывается в generate_results методе.

Я новичок в концепции понятий класса и объекта на Python, поэтому любые недостатки в моем дизайне и подходе будут оценены.

+0

Выберите три значения для кортежа, а затем просто назначьте его. Пример: 'self.results = (0, 0, 0)' будет устанавливать его на три нуля. –

+0

Вы можете ввести: 'self.results =()' и то, что вы сделали в 'generate_results()', останется в силе. –

+0

@TomKarzes Но не является ли он неизменным неизменным, поэтому, если я устанавливаю его на '(0, 0, 0)', тогда мне не разрешат вводить в него новые рассчитанные значения? – Karim

ответ

2

Вы можете дополнительно код этого:

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

Если я сужу только из кода, я могу сказать, что это не важно, потому что внутри generate_results() вы перекрытая self.results.

Может быть полезно инициализировать пустой кортеж только , если вам нужно сохранить его след для дальнейших нужд в вашей программе, в противном случае нет.

Следующий код summerizes что я сказал:

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() 
Смежные вопросы