Python - сбросить значение для всех экземпляров одного и того же класса

в игре Ren'Py я кодирую, я пытаюсь оптимизировать свой код и застрял в поиске способа сбросить одно и то же значение для всех экземпляров одного и того же класса.

Вот мой код:

init python:
    class Girl():
        def __init__(self,name,age):
            self.name = name
            self.age = age
            self.place = "Nowhere"
            self.appear = False

   Bree = Girl("Bree",26)
   Sasha = Girl("Sasha",27)

label reset_appear():
    Bree.appear = False
    Sasha.appear = False

На данный момент у меня есть только несколько экземпляров этого класса, но я планирую добавить еще около 50, и я хотел исправить это, прежде чем продолжить.

Я подумал о том, чтобы сделать что-то вроде этого (еще будучи в классе):

def reset_appear(self):
    self.appear = False

Но вам все равно нужно будет вызывать его для каждого экземпляра. Я тоже думал об этой функции вне класса, но не знаю, как ее кодировать.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
370
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать атрибут класса для хранения всех экземпляров и метод класса чтобы перебрать все экземпляры:

class Girl:
    _instances = []
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.place = "Nowhere"
        self.appear = False
        self._instances.append(self)

    @classmethod
    def reset_appear(cls):
        for instance in cls._instances:
            instance.appear = False

    def __repr__(self):
        # added for sake of example
        return '{} {}'.format(self.name, self.appear)


Bree = Girl("Bree", 26)
Bree.appear = True
Sasha = Girl("Sasha", 27)
Girl.reset_appear()
print(Girl._instances)
#  [Bree False, Sasha False]

Добавленный classmethod хорош.

Graipher 06.01.2019 18:07

Спасибо за ответ, но поскольку я новичок в Python, я еще не знаком с @classmethod; повтор; (cls); и .format Сравнивая ваш ответ с ответом @ Graipher, я думаю: разве это не «почти» тот же метод, который он перечислил? Мне нужно больше поработать над этой концепцией, чтобы лучше понять :)

Phoenix iz Fire 06.01.2019 19:51
Ответ принят как подходящий

Я не знаком с Ren'Py, поэтому мои примеры написаны на обычном Python.

Вам нужно где-то собрать все экземпляры класса Girl. Это может быть простой список:

class Girl():
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.place = "Nowhere"
        self.appear = False

Bree = Girl("Bree", 26)
Sasha = Girl("Sasha", 27)
girls = [Bree, Sasha]

for girl in girls:
    girl.appear = False

Или вы можете попросить класс обработать это:

class Girl():
    instances = []

    def __init__(self,name,age):
        Girl.instances.append(self)
        self.name = name
        self.age = age
        self.place = "Nowhere"
        self.appear = False

for girl in Girl.instances:
    girl.appear = False

Ren'Py может использовать код Python в любое время, просто используя «init python» или «python» (для вызовов), поэтому я использую Python :) В любом случае, ваш второй метод самый простой и отлично работает. Большое спасибо ! Ваш первый метод выглядит великолепно, но поскольку мне потребуется добавить более 50 девушек, было бы ошибкой использовать ручной метод для создания списка. Видите ли, я стараюсь сделать свой код более автоматическим, чтобы упростить его для будущих разработок :) (сначала я даже не использовал систему классов, и мне нравится 20 параметров для этого класса, так что это было полный бардак ^^)

Phoenix iz Fire 06.01.2019 19:47

Другие вопросы по теме