在Python类中传递参数

0 投票
1 回答
701 浏览
提问于 2025-04-18 18:48

在这段代码中,列表x和y被随机赋值为0到N之间的数字,概率是0.5。我随机选择一个代理(agent)并通过func1将其移除。然后,我又通过func2添加一个代理。现在我定义了两个类对象x1和x2。x2的输入参数'state1'是从x1获取的,而x1的'state2'又是从x2获取的。

我找不到合适的方法来在x1和x2中传递参数'state2'和'state1'。从我代码的最后四行可以看出,state1和state2应该在x1和x2之前定义,但我不能这样做,因为类对象x1和x2应该先定义,就像我现在做的那样。

我想实现的目标是这样的:我有两个群体N1和N2。我随机从N1中选择一个代理(比如说state1),并将其添加到N2中(保持它的状态=state1)。同时,我从N2中移除一个代理(比如说state2),并将其添加到N1群体中(保持它的状态=state2)。这个过程会在固定的时间间隔内重复进行。

有没有人能告诉我一个合适的方法来实现这个目标并让代码运行起来?

import random

class func():
    def __init__(self, N, state):
        self.N = N
        self.x = []
        self.y = []

        agents = range(self.N)

        for i in range(self.N):
            if random.random() < 0.5:
                self.x.append(i)
            else:
                self.y.append(i)

        agent = random.choice(agents)

    def func1(self, agent):
        if self.agent in self.x:
            self.x.remove(agent)
            return 1
        elif self.agent in self.y:
            self.y.remove(agent)
            return 2

    def func2(self, state):
        if state == 1:
            self.x.append(N)
            return self.x
        elif state == 2:
            self.y.append(N)
            return self.y

if __name__=='__main__':

    N1 = 100
    N2 = 100
    x1 = state(N1, state2)
    x2 = state(N2, state1)

    state1 = func.func1()
    state2 = func.func1()

1 个回答

1

你可以把状态构造函数中的第二个参数去掉,稍后再通过一个单独的方法来传递,比如用 set_state(state)

举个例子:

x1 = state(N1)
x2 = state(N2)

state1 = func.func1()
state2 = func.func2()

setState(x1, state2)
setState(x2, state1)

在状态函数中,你需要把状态参数和相关的代码移到新的函数 setState 中。我看不到那段代码,所以不能在这里展示。

撰写回答