首页 > 解决方案 > 自动初始化多个类实例

问题描述

到目前为止,我主要使用 Python 进行数据分析,但有一段时间尝试实现一些东西。现在我正在尝试为一条鱼建立一个毒代动力学-毒代动力学模型来分析化学物质对它们的影响。

所以给出以下代码:

import numpy as np

class fish():

def __init__(self):
    self.resistance_threshold = np.random.normal(0,1)


我现在的问题是,假设我想初始化 fishclass 的多个实例(比如 1000 条鱼),每个实例对化学物质都有不同的抵抗力,以便对基于代理的种群进行建模。如何自动实现这一目标?

我想知道是否有使用例如索引作为变量名的一部分的东西,例如:

for fishid in range(0,1000):
    fishfishid = fish() # use here the value of fishid to become the variables name. E.g. fish1, fish2, fish3, ..., fish999

现在,即使有可能在 Python 中做到这一点,我总是觉得,实现这 1000 个实例是一种不好的做法。并且想知道是否有类似 OOP-Python 的方法。例如设置一个类“人口”,它在自己的__init__函数中初始化它,但是我如何在不先初始化它们的情况下分配鱼呢?

任何提示、指针或链接将不胜感激。

标签: pythonoopinitialization

解决方案


您可以创建一个类FishPopulation,然后Fish根据 size 参数存储您需要的所有内容。例如,这样的事情会起作用:

import numpy as np


class Fish:
    def __init__(self):
        self.resistance_threshold = np.random.normal(0, 1)


class FishPopulation:
    def __init__(self, size=1000):
        self.size = size
        self.fishes = [Fish() for _ in range(size)]

你可以像这样迭代它:

fish_population = FishPopulation(size=10)
for fish in fish_population.fishes:
    print(fish.resistance_threshold)

>>> 
    -0.9658927669391391
    -0.5934917229482478
    0.8827336199040103
    -1.5729644992077412
    -0.7682070400307331
    1.464407499255235
    0.7724449293785645
    -0.7296586180041732
    -1.1989783570280217
    0.15716170041128566

你可以像这样访问他们的索引:

print(fish_population.fishes[0].resistance_threshold)

>>> -0.9658927669391391

推荐阅读