Использование одного и того же имени метода для двух разных заголовков методов - PullRequest
0 голосов
/ 19 июля 2011

У меня небольшая проблема при работе с python / Django. Дело в том, что у меня есть класс, называемый Plantao, и метод get_ultima_posicao, который я хотел вести следующим образом: Если вызывается классом, как Plantao.get_ultima_posicao, он должен ожидать два параметра, один обязательный, один необязательный. И когда он вызывается объектом класса, например p.get_ultima_posicao (p является экземпляром Plantao), единственным параметром, который он должен ожидать, будет self.

Есть ли способ сделать это?

Я знаю, что есть способ сделать что-то вроде полиморфизма, используя (self, * args) в заголовке метода, но, поскольку один из моих методов должен быть статическим, используя @staticmethod, он не имеет self в качестве параметра.

EDIT

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()):

EDIT

Хорошо, вот моя модель для класса 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? Вот почему я хочу сделать это.

EDIT

В надежде, что это поможет найти решение, я добавляю здесь коды функций:

@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"
...