根据给定参数选择课程

时间:2015-10-09 14:17:44

标签: 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, 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表示单位属于蓝色类)没有事先设定一个,我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以为此创建功能:

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

答案 1 :(得分:0)

您可以在__class__

中设置__init__属性
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

        if z > x:
            self.__class__ = Red
        else:
            self.__class__ = Blue

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

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

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)