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

в игре 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

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

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я не знаком с 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
0 голосов
/ 06 января 2019

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

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]
...