Python 基于给定参数选择类

Python 基于给定参数选择类,python,class,Python,Class,所以我有一门课: class Unit(object): def __init__(self, name, x , y, z): self.name = name self.strength = x + y self.intelligence = x + z self.speed = y + z - x 这些单位中有两种 class Red(Unit): def __init__(self, name, x, y

所以我有一门课:

class Unit(object):
    def __init__(self, name, x , y, z):
        self.name = name
        self.strength = x + y
        self.intelligence = x + z 
        self.speed = y + z - x
这些单位中有两种

class Red(Unit):
    def __init__(self, name, x, y, z):
        Unit.__init__(self,name, x, y, z)
        self.strength = self.strength * 2   

class Blue(Unit):
    def__init__(self, name, x, y, z):
        Unit.__init__(self, name, x, y, z)
        self.speed = self.speed * 2

我想根据x,y,z用作输入的内容来决定比赛z>x表示该单位属于红色类,x>z表示该单位属于蓝色类,而不必事先设置一个,我该怎么做

您可以为此创建函数:

def builder(name, x, y, z):
    if z > x:
        return Red(name, x, y, z)
    elif x > z:
        return Blue(name, x, y, z)
您可以在_init__中设置_class__属性:

您还可以创建一个实例来实例化适当的类。您可以将其作为一个独立函数来执行,也可以创建一个类方法。以下是独立版本:

def unit_factory(name, x, y, z):
    if x > z:
        return Red(name, x, y, z)
    return Blue(name, x, y, z)

red = unit_factory("foo", 1, 2, 3)
blue = unit_factory("bar", 3, 2, 1)

所以你想比如说isinstanceUnit1,2,3,Red是真的吗?我基本上想要的东西是,如果我插上ben=Class'ben',1,4,5,它会决定ben是红色还是蓝色类的一部分,然后是的,你可能想要如@xi_u所示的那样。可能重复感谢这么多,是担心这不是一个好问题,但不确定要搜索什么!感谢这看起来像我正在寻找的,我基本上一直在使用随机数来生成一个玩家统计数据,我希望这些随机统计数据被用来决定使用哪个类你的例子不符合OP条件。如果z>x:else:z>x还是x@xi_不过,OP的版本和您的版本对于x==z是未定义的;您得到的是一个实例,而不是一个实例。@x:OP没有指定当它们相等时会发生什么。我想一定是这样或那样。
def unit_factory(name, x, y, z):
    if x > z:
        return Red(name, x, y, z)
    return Blue(name, x, y, z)

red = unit_factory("foo", 1, 2, 3)
blue = unit_factory("bar", 3, 2, 1)