Ошибка TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType' при сложении результатов работы методов класса

class Procedure:

    def __init__(self, procedure, data, doctor, price):
        self.__procedure = procedure
        self.__data = data
        self.__doctor = doctor
        self.__price = price
    
    # модификаторы
    def set_procedure(self, procedure):
        self.__procedure = procedure

    def pay(self, bal):
        self.__price += bal

    def set_data(self, data):
        self.__data = data

    def set_price(self, price):
        self.__price = price

    def set_doctor(self, doctor):
        self.__doctor = doctor

    # получатели
    def get_procedure(self):
        return f'Название процедуры:\n{self.__procedure}'

    def get_data(self):
        return f'Дата: {self.__data}'

    def get_doctor(self):
        return f'Врач: {self.__doctor}'

    def get_price(self):
        return self.__price


def main():

    treatment1 = proc1()
    treatment2 = proc2()
    treatment3 = proc3()

    print()
    print(f'Процедура № 1 \n'
          f'{treatment1.get_procedure()}\n' \
          f'{treatment1.get_data()}\n' \
          f'{treatment1.get_doctor()}\n' \
          f'Стоимость: {treatment1.get_price()}\n')
    print(f'Процедура № 2\n'
          f'{treatment2.get_procedure()}\n' \
          f'{treatment2.get_data()}\n' \
          f'{treatment2.get_doctor()}\n' \
          f'Стоимость: {treatment2.get_price()}\n')
    print(f'Процедура №3\n'
          f'{treatment3.get_procedure()}\n' \
          f'{treatment3.get_data()}\n' \
          f'{treatment3.get_doctor()}\n' \
          f'Стоимость: {treatment3.get_price()}\n')

    t1 = treatment1.pay(treatment1.get_price())
    t2 = treatment2.pay(treatment2.get_price())
    t3 = treatment3.pay(treatment3.get_price())
    summ = t1 + t2 + t3
    print(summ)

# процедуры 
def proc1():
    proc = 'ferst'
    data = 'today'
    doctor = 'jon'
    price = 200

    in_procedure = Procedure(proc, data, doctor, price)
    return in_procedure

def proc2():
    proc = 'second'
    data = 'today'
    doctor = 'Li'
    price = 300

    in_procedure = Procedure(proc, data, doctor, price)
    return in_procedure

def proc3():
    proc = 'three'
    data = 'today'
    doctor = 'Chan'
    price = 150

    in_procedure = Procedure(proc, data, doctor, price)
    return in_procedure

main()

Ответы (1 шт):

Автор решения: CrazyElf
    t1 = treatment1.pay(treatment1.get_price())
    t2 = treatment2.pay(treatment2.get_price())
    t3 = treatment3.pay(treatment3.get_price())
    summ = t1 + t2 + t3
    print(summ)

У вас метод Procedure.pay ничего не возвращает, поэтому во всех трёх переменных оказывается None. Мне кажется, тут какая-то ошибка у вас в логике, не должна процедура pay обнулять в результате своей работы стоимость процедуры, а у вас именно это происходит. Платить должен пациент, а не процедура, на мой взгляд. А тут код должен быть такой:

    t1 = treatment1.get_price()
    t2 = treatment2.get_price()
    t3 = treatment3.get_price()
    summ = t1 + t2 + t3
    print(summ)

Вывод:

Процедура № 1 
Название процедуры:
ferst
Дата: today
Врач: jon
Стоимость: 200

Процедура № 2
Название процедуры:
second
Дата: today
Врач: Li
Стоимость: 300

Процедура №3
Название процедуры:
three
Дата: today
Врач: Chan
Стоимость: 150

650
→ Ссылка