为两个不同的方法标题使用相同的方法名称

时间:2011-07-19 13:18:39

标签: python django django-models polymorphism static-methods

我在使用python / Django时遇到了一个小问题。问题是,我有一个名为'Plantao'的类,以及一个方法'get_ultima_posicao',我希望以下列方式表现: 如果被类调用,比如Plantao.get_ultima_posicao,它应该期望两个参数,一个是强制的,一个是可选的。当由类对象调用时,例如p.get_ultima_posicao(p是Plantao的一个实例),它应该期望的唯一参数是self。

有没有办法做到这一点?

我知道有一种做多边形的方法,在方法头中使用(self,* args),但由于我的一个方法应该是静态的,使用@staticmethod,它没有self作为参数。

修改

In [4]: Plantao.get_ultima_posicao(empresa = 1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/*************************************/<ipython console> in <module>()

TypeError: unbound method get_ultima_posicao() must be called with Plantao instance as first argument (got nothing instead)

In [5]: planta.get_ultima_posicao()
Out[5]: 0

凡planta.empresa = 1.我想让它工作,两次执行返回相同的值

我希望方法def类似于:

def get_ultima_posicao(self):

AND

@staticmethod
def get_ultima_posicao(empresa, data = datetime.date.today()):

修改

好的,这是我的Plantao课程模型:

usuario     = models.ForeignKey(Usuario, null=True, blank=True) # user
empresa     = models.ForeignKey(Empresa, null=True, blank=True) # department
posicao     = models.IntegerField(default=0)                    # position in queue
data        = models.DateField(null=True, blank=True)           # date added in queue

所以,我可能知道我想从哪个部门获取用户,为什么我需要检索一个Plantao对象才能搜索它?同时,如果我已经检索过它,如果它已经在Plantao对象中,为什么我需要再次获取该数据?这就是我想要这样做的原因。

修改

希望它可以帮助找到解决方案我在这里添加功能代码:

@staticmethod
def get_ultima_posicao(empresa, data = datetime.date.today()):
    if empresa is None:
        return 'Empresa invalida'

    ultima = Plantao.get_ultimo_fila(empresa = empresa)
    plantao = Plantao.objects.filter(data=data, empresa=empresa).order_by('posicao')

    usuario = None

    for i in plantao:
        ultima += 1
        i.posicao = ultima
        i.save()
        if i.usuario.atendimento_pendente() == False and i.usuario.cliente_aguardando() == False and i.usuario.esta_online() == True:
            return i.usuario

    return "Nenhum usuario disponivel na escala"



def get_ultima_posicao(self):
    if self.empresa is None:
        return 'Empresa invalida'

    ultima = Plantao.get_ultimo_fila(empresa = self.empresa)
    plantao = Plantao.objects.filter(data=self.data, empresa=self.empresa).order_by('posicao')

    usuario = None

    for i in plantao:
        ultima += 1
        i.posicao = ultima
        i.save()
        if i.usuario.atendimento_pendente() == False and i.usuario.cliente_aguardando() == False and i.usuario.esta_online() == True:
            return i.usuario

    return "Nenhum usuario disponivel na escala"

0 个答案:

没有答案