Python - Как вернуть переменной объекта начальное значение?

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

подскажите пожалуйста, как вернуть переменной объекта значение по умолчанию / начальное значение?

В примере ниже - объект пистолет, после выстрела кол-во патронов -1, после применения метода reloading кол-во патронов должно стать начальным - 10. Если прописываем 10 напрямую в методе reloading, то для любого другого объекта, с начальным значением bullet, отличным от 10 "перезарядка" будет некорректной...

    def __init__(self, name, damage, bullet):        
        self.name = name
        self.bullet = bullet
        self.damage = damage
                
    
    def shot(self):
        self.bullet -= 1
        return (f'Произведен выстрел из "{self.name}"!\n'
                f'Нанесен урон: {self.damage}\n'
                f'Осталось патронов: {self.bullet}\n')
    
    "Метод 'Перезарядить оружие'."
    def reloading(self):
        self.bullet = 10
        return (f'"{self.name}" перезаряжен!\n'
                f'Патронов: {self.bullet}\n''')
    

    def __str__(self):
        return (
            f'Текущее состояние оружия: «{self.name}»\n'
            f'Урон: {self.damage}\n'
            f'Патронов: {self.bullet}\n' 
            )

first_gun = Gun('Пистолет Макарова', damage=5, bullet=10)

print(first_gun)
print(first_gun.shot())
print(first_gun.reloading())
print(first_gun)```

Ответы

▲ 3Принят

Для этого нужно это начальное значение запомнить.
Если вы в __init__() прописываете именно максимальную вместимость, то тогда у вас должно быть 2 переменных - максимальная вместимость (размер обоймы) и текущее количество патронов. И в reloading() делать текущее количество патронов = размер обоймы

def __init__(self, name, damage, clip):        
    self.name = name
    self.clip = clip  # размер обоймы
    self.bullet = self.clip  # текущее количество патронов
    self.damage = damage

def shot(self):
    self.bullet -= 1  # бесконечное количество патронов

"Метод 'Перезарядить оружие'."
def reloading(self):
    self.bullet = self.clip

И ещё момент - формально у вас сейчас бесконечная обойма, т.к. вы при выстреле не проверяете закончились ли патроны. У вас будет количество патронов -1 а вы будете продолжать стрелять.