class vehicles:
working_vehicles = [] # this is a class variable
class car:
def __init__(self):
vehicles.working_vehicles.append(self) # adds itself to working_vehicles
def drive(self):
pass
>>> print(vehicles.working_vehicles)
[<__main__.vehicles.car object at 0x022DF6F0>, <__main__.vehicles.car object at 0x01E97ED0>, <__main__.vehicles.car object at 0x01EAA6B0>]
这在视觉上并没有什么帮助,但您可以调用所有汽车上的drive方法,如下所示:
>>> for car in vehicles.working_vehicles:
... car.drive()
如果你真的想这样做,你必须将它设计到你的模型中,这样,例如,你就有了一个所有创建的汽车的注册表。你知道吗
这不是一件困难的事情-我认为最明显的方法是定制
__new__
方法来保留该注册表,并进行调用:另一种方式,因为这是类级别的东西,应该保留 创建类时,可以在元类中处理。 好处:它是“纯”的,当您像上面那样实例化该类的第一个对象时,您不会有特殊的处理。 缺点:具有不同元类的类很难组合-而且 如果您有一个类层次结构,其中有些类需要这种行为,而有些类不需要这种行为,那么在类级别这样做可以保持所有内容的可互换性。你知道吗
实际上,请注意,创建超类
Base
是一个可选步骤。如果您在所有项目中只在一个地方使用它,那么逻辑很可能在car
类本身内部(正如Narcise的回答,bellow)如果不想这样做,可以使用垃圾收集器(
gc
)模块找出对象的所有实例,并对它们调用方法。我不认为这是一个冰的事情,因为gc
本身就是一个冰 cPython的实现细节。你知道吗或者在一条丑陋的单行线上:
测试:
回答你的问题,是的,有办法。您可以使用class variable来跟踪实例。你知道吗
然后可以创建实例,并从
vehicles.working_vehicles
访问它们。你知道吗演示:
首先创建汽车:
然后从
vehicles.working_vehicles
访问它们。你知道吗这在视觉上并没有什么帮助,但您可以调用所有汽车上的
drive
方法,如下所示:或在一行中:
它不会立即驱动汽车。您需要在
map
迭代器上调用list
。你知道吗相关问题 更多 >
编程相关推荐