【问题标题】:Anyone knows how to create an attribute of a Class which will be a '''set''' of all instances of that class?任何人都知道如何创建一个类的属性,该属性将是该类所有实例的“集合”?
【发布时间】:2022-01-03 16:32:50
【问题描述】:

我知道每个实例都会继承该属性,但我想要一个 函数 或者我应该将其称为该类的 方法 以返回创建的所有实例的集合那个班的。

假设我创建了 3 个实例并从最后一个实例调用一个方法,该方法将返回所有先前创建的实例以及我从中调用它的实例。

我可以通过制作一个列表来实现它,但是可以返回一个集合吗?

我是否缺少某种构造函数?

class Bee():
    
    instances = []

    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier
        

    def __str__(self):
        self.instances.append(f"{self.identifier} {self.name}")
        return f"{self.identifier} {self.name}"

    def get_hive(self):
        return self.instances

【问题讨论】:

  • 您真的不想在每次调用__str__ 时都将实例添加到列表中。在__init__中添加实例。
  • 首先你需要定义两个实例何时被认为是相等的

标签: python class object constructor set


【解决方案1】:

通常您会将Hive 创建为一个单独的类并将Bees 放入其中。然后,您就有了一个清晰明确的数据结构,其工作包括跟踪所有创建的蜜蜂。

类似:

class Hive:
    def __init__(self):
        self.bees = []

    def add_bee(self, bee):
        self.bees.append(bee)


class Bee:
    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier

    def __str__(self):
        return f"Bee({self.name}, {self.identifier})"

    def __repr__(self):
        return str(self)


# User code example
hive = Hive()

b1 = Bee('My Bee', 0)
b2 = Bee('Some Other Bee', 1)

hive.add_bee(b1)
hive.add_bee(b2)

print(hive.bees)  # display all bees inside the hive

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多