Python В проверке вместо вызова метода функции используют ссылку на функцию. Как с этим работать?
Мой код:
class Mosquito:
def __init__(self, age):
self.age = age
self.f = ''
self.lv = ''
def __str__(self):
return f"{self.__class__.__name__}, {self.age} days"
def feed(self):
return self.f
def lives(self):
return self.lv
class MaleMosquito(Mosquito):
def __init__(self, age):
super().__init__(age)
self.f = 'nectar'
self.lv = 'on land'
def hearing(self):
return f'I hear and see everything {self.lv}'
class FemaleMosquito(Mosquito):
def __init__(self, age):
super().__init__(age)
self.f = 'blood'
self.lv = 'on land'
def squeak(self):
return f'The thin squeak of a mosquito after eating {self.f}'
class MosquitoLarva(MaleMosquito, FemaleMosquito):
def __init__(self, age):
super().__init__(age)
self.f = 'algae'
self.lv = 'in water'
Проверяющая система:
mm = MaleMosquito(19)
fm = FemaleMosquito(42)
ml = MosquitoLarva(3)
for item in (mm, fm, ml):
print(f'{item}, I feed {item.feed}, I lives {item.lives}')
m = Mosquito(13)
print(m)
Нужный вывод:
MaleMosquito, 19 days, I feed nectar, I lives on land
FemaleMosquito, 42 days, I feed blood, I lives on land
MosquitoLarva, 3 days, I feed algae, I lives in water
Mosquito, 13 days
Мой вывод:
MaleMosquito, 19 days, I feed <bound method Mosquito.feed of <solution.MaleMosquito object at 0x2b4eb87eefd0>>, I lives <bound method Mosquito.lives of <solution.MaleMosquito object at 0x2b4eb87eefd0>>
FemaleMosquito, 42 days, I feed <bound method Mosquito.feed of <solution.FemaleMosquito object at 0x2b4eb87eedc0>>, I lives <bound method Mosquito.lives of <solution.FemaleMosquito object at 0x2b4eb87eedc0>>
MosquitoLarva, 3 days, I feed <bound method Mosquito.feed of <solution.MosquitoLarva object at 0x2b4eb87eed60>>, I lives <bound method Mosquito.lives of <solution.MosquitoLarva object at 0x2b4eb87eed60>>
Mosquito, 13 days
Сменить систему проверки я не могу.
Ответы (3 шт):
Автор решения: Sylvia-Anna
→ Ссылка
Так как возвращается ссылка на функцию, то эту функцию можно вызвать. Добавьтe скобки к Вашей ссылке.
for item in (mm, fm, ml):
print(f'{item}, I feed {item.feed()}, I lives {item.lives()}')
Автор решения: Pavlo Khyzhniak
→ Ссылка
class MaleMosquito(Mosquito):
def __init__(self, age):
super().__init__(age)
self.f = 'nectar'
self.lv = 'on land'
self.feed = feed()
self.lives = lives()
Автор решения: CrazyElf
→ Ссылка
Можно использовать "свойства" класса - просто добавьте декоратор @property к этим методам:
@property
def feed(self):
return self.f
@property
def lives(self):
return self.lv
Вывод:
MaleMosquito, 19 days, I feed nectar, I lives on land
FemaleMosquito, 42 days, I feed blood, I lives on land
MosquitoLarva, 3 days, I feed algae, I lives in water
Mosquito, 13 days