p.is_available — объект-метод, привязанный к товару. Как любой объект без особой логики,
он истинен, поэтому условие пропускает все товары. Результат проверки даёт только вызов
p.is_available().
Эталонное решение
from decimal import Decimal
class Product:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock
def is_available(self):
return self.stock > 0
def available_names(products):
return [p.name for p in products if p.is_available()]
catalog = [
Product("Беспроводная мышь", Decimal("1499.00"), 12),
Product("Коврик для мыши", Decimal("490.00"), 0),
Product("Клавиатура", Decimal("2990.00"), 3),
]
print(available_names(catalog))