1

在我正在编写的 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

但是您仍然需要为每个实例调用它。我也想到了类外的相同功能,但我不知道如何编码。

4

2 回答 2

1

您可以使用类属性来存储所有实例,并使用类方法来迭代所有实例:

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]
于 2019-01-06T17:05:45.140 回答
0

我对 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
于 2019-01-06T17:06:36.503 回答