TransWikia.com

Классы. Калькулятор

Stack Overflow на русском Asked by krumlyakov on August 13, 2020

Подскажите ,пожалуйста, как сделать так, что бы значение last записывалось в атрибут класса, а не в атрибут объекта.

class Calculator:
        last = None
        def __init__(self):
            self.history_array = []
       
        def sum(self, a, b):
            self.history_array.append( a + b)
            self.last = self.history_array[-1]
            return a + b
        def sub(self, a, b):
            self.history_array.append( a - b)
            self.last = self.history_array[-1]
            return a - b
        def mul(self, a, b):
    
            self.history_array.append(a * b)
            self.last = self.history_array[-1]
            return a * b
        def div(self, a, b, mod=False):
            if mod:
                self.history_array.append( a % b)
                self.last = self.history_array[-1]
                return a % b
            else:
                self.history_array.append(a / b)
                self.last = self.history_array[-1]
                return a / b
        def history(self, n):
          
            try:
                result = self.history_array[-n]
            except IndexError:
                result = None
            return result
        def clear(self): self.last = None

3 Answers

# яндекс это принял

class Calculator:
    history_array = None
    def __init__(self):
        self.history_array = []
    last_operation = None
    @property
    def last(self):
        return Calculator.last_operation

    def sum(self, a, b):
        self.history_array.append('sum({}, {}) == {}'.format(a, b, a + b))
        Calculator.last_operation = self.history_array[-1]
        return a + b
    def sub(self, a, b):
        self.history_array.append('sub({}, {}) == {}'.format(a, b, a - b))
        Calculator.last_operation = self.history_array[-1]
        return a - b
    def mul(self, a, b):
        self.history_array.append('mul({}, {}) == {}'.format(a, b, a * b))
        Calculator.last_operation = self.history_array[-1]
        return a * b
    def div(self, a, b, mod=False):
        if mod:
            self.history_array.append('div({}, {}) == {}'.format(a, b, a % b))
            Calculator.last_operation = self.history_array[-1]
            return a % b
        else:
            self.history_array.append('div({}, {}) == {}'.format(a, b, a / b))
            Calculator.last_operation = self.history_array[-1]
            return a / b
    def history(self, n):
        try:
            result = self.history_array[-n]
        except IndexError:
            result = None
        return result
    def clear(self): Calculator.last_operation = None

from classes1_tests import Test

Test(Calculator).run_all()

Correct answer by wyndex on August 13, 2020

Пишите соответственно в поле класса, а не в поле объекта:

Calculator.last = ...

Answered by CrazyElf on August 13, 2020

Перед тем, как занматься ООП советую почитать вот это: https://wombat.org.ua/AByteOfPython/object_oriented_programming.html

Так как Вы явно не до конца понимаете что такое классы и их атрибуты, поля, методы и т.д.

Выделю абзац оттуда:

Переменные, принадлежащие объекту или классу, называют полями. Объекты могут также обладать функционалом, т.е. иметь функции, принадлежащие классу. Такие функции принято называть методами класса. Эта терминология важна, так как она помогает нам отличать независимые функции и переменные от тех, что принадлежат классу или объекту. Всё вместе (поля и методы) принято называть атрибутами класса.

Answered by Nezerix on August 13, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP