python - 创建一个分派(dispatch)到随机对象的类

标签 python random

假设我有一个具有通用方法(add)的类,并且我想创建一个新类RandomPair,它将包含一对同一类的对象并将 add 分派(dispatch)到随机的一个。

例如,

class C1 (object):
    def __init__ (self, title, plus = True):
        self.title = title
        self.plus = plus
        self.acc = 0

    def add (self, x):
        if self.plus:
            self.acc += x
        else:
            self.acc -= x

    def __str__ (self):
        return "C1(%s,%g)" % (self.title,self.acc)

class C2 (object):
    def __init__ (self, title):
        self.title = title
        self.all = list()

    def add (self, x, pos = None):
        if pos:
            self.all.insert(pos,x)
        else:
            self.all.append(x)

    def __str__ (self):
        return "C2(%s,%s)" % (self.title,self.all)

import random
class RandomPair (object):
    def __init__ (self, klass, title, **kwargs):
        self.objects = [klass(title + "#" + str(i), kwargs) for i in range(2)]

    def add (self, *args, **kwargs):
        self.objects[random.randint(0,1)].add(args,kwargs)

    def __str__ (self):
        return "\n".join([str(o) for o in self.objects])

现在,我希望能够做到

rp1 = RandomPair(C1,"test")
rp1.add(1)
rp1.add(2)
rp2 = RandomPair(C2,"test")
rp2.add(1)
rp2.add(2, pos=0)

但我明白了

TypeError: add() got multiple values for keyword argument 'self'

self.objects[random.randint(0,1)].add(args,kwargs)中。

最佳答案

您需要应用 args 和 kwargs,使用与定义参数时类似的符号。您需要在两个地方执行此操作;在 RandomPair.__init__()RandomPair.add() 中:

self.objects = [klass(title + "#" + str(i), **kwargs) for i in range(2)]

self.objects[random.randint(0,1)].add(*args, **kwargs)

否则你只是传递两个参数,一个元组和一个字典。

你的下一个问题在C2.add()中;您正在使用 pos 如果它为空;你想反转这个测试。更好的是,显式测试 None:

def add(self, x, pos=None):
    if pos is None:
        self.all.append(x)
    else:
        self.all.insert(pos,x)

关于python - 创建一个分派(dispatch)到随机对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552530/

相关文章:

Python - For 循环数百万行

C++ 多程序问题(rand、转换、崩溃)

java - 如何使两个字符串之间随机连接

python - 在 Python : ValueError 中对元组进行 for 循环

python - scikit-learn:ColumnTransformer 和 OneHotEncoder – 如何针对所有字段中的所有新分类级别出错?

Python:循环作用于多个文件并写入新文件

python - 我应该对我的 python 函数/方法进行多少输入验证?

javascript - 随机放置div而不覆盖

c - 使用两个函数生成随机数数组

java - 生成初始化 vector 真的需要 SecureRandom 还是足够随机?