# 猫狗队列
class Pet:
def __init__(self, type):
self._type = type
def getPetType(self):
return self._type
class Dog(Pet):
def __init__(self):
super().__init__("dog")
def getPetType(self):
return super().getPetType()
class Cat(Pet):
def __init__(self):
super().__init__("cat")
def getPetType(self):
return super().getPetType()
class PetEnterQueue:
def __init__(self, pet, count):
self._pet = pet
self._count = count
def getPet(self):
return self._pet
def getCount(self):
return self._count
def getEnterPetType(self):
return self._pet.getPetType()
class DogCatQueue:
def __init__(self):
self._dogQ = []
self._catQ = []
self._count = 0
def add(self, pet):
if pet.getPetType() == "dog":
self._count += 1
self._dogQ.append(PetEnterQueue(pet, self._count))
elif pet.getPetType() == "cat":
self._count += 1
self._catQ.append(PetEnterQueue(pet, self._count))
else:
raise RuntimeError("err, not dog or cat")
def pollAll(self):
if self._dogQ and self._catQ:
if self._dogQ[0].getCount() < self._catQ[0].getCount():
return self._dogQ.pop(0).getPet()
else:
return self._catQ.pop(0).getPet()
elif self._dogQ:
return self._dogQ.pop(0).getPet()
elif self._catQ:
return self._catQ.pop(0).getPet()
else:
raise RuntimeError("err, queue is empty!")
def pollDog(self):
if self._dogQ:
return self._dogQ.pop(0).getPet()
else:
raise RuntimeError("Dog queue is empty!")
def pollCat(self):
if self._catQ:
return self._catQ.pop(0).getPet()
else:
raise RuntimeError("Cat queue is empty!")
if __name__ == "__main__":
dogcatqueue = DogCatQueue()
dogcatqueue.add(Dog())
dogcatqueue.add(Dog())
dogcatqueue.add(Cat())
print(dogcatqueue.pollDog().getPetType())
print(dogcatqueue.pollAll().getPetType())
print(dogcatqueue.pollAll().getPetType())