class Example():
	
	def __init__(self, a1):
		self.a1 = a1
 
	def addition(self, a2): #Оба метода содержат одинаковую переменную 'a2'
		self.a2 = a2
		self.addition = self.a1 + self.a2
		print(self.addition)

	def substraction(self, a2): #Здесь тоже 'a2'
		self.a2 = a2
		self.substraction = self.a1 - self.a2
		print(self.substraction)


example = Example(5)

example.addition(10)
example.substraction(10)

# 1) С одной стороны, для меня 'a2' - это одно и то же значение (объяснено ниже)
# 2) С другой стороны, я хочу иметь возможность проверять каждый метод индивидуально, с новым значением

# Чтобы было понятнее, допустим, Класс - это человек
# А "a2" - это его возраст
# Но я не хочу присваивать классу возраст, при его создании, я хочу иметь возможность работать с ним отдельно
# Кроме того, я хочу иметь возможность посмотреть, что будет, если бы у данного человека был другой возраст
# Объяснение сумбурное, потому что у меня нет конкретного примера, просто данная концепция пришла в голову

############ Вопрос:
#  Как превратить данный код из обезьяньего в лаконичный?
#  Чтобы не писать каждый раз 
#  (self, a2)
#  self.a2 = a2
#  А то получается "Copy and paste programming"
############ Дополнительнйы вопрос:
#  Разрешается ли вообще объявлять переменную с одним и тем же названием несколько раз?
#  Или это совсем плохо?
############