Как сделать, чтобы не экземпляр , а сам класс возвращал значение?
Предположим есть class Square(): Реально ли сделать так, чтобы при вызове print(Square(5))
выводилось 25 , т.е. типа квадрат стороны? Я попробовал через __call__, но у меня это работает только с экземплярами класса, а если делать через переопределение __str__ / __repr__, то можно вернуть только строку, а мне необходимо вернуть именно число, чтобы потом была возможность сделать из аналогичных классов список для сортировки.
Заранее спасибо!
Ответы (2 шт):
Автор решения: Валерий
→ Ссылка
class Square():
def __init__(self,n):
self.value=n**2
print(Square(5).value)
Автор решения: extrn
→ Ссылка
Вариантов много, вот некоторые:
- Переопределяем
__new__
class Square:
def __new__(cls, x):
return x * x
- Переопредяем
__call__метакласса
class M(type):
def __call__(self, x):
return x * x
class Square(metaclass=M):
pass
- Наследуемся от
int, переопредеяем конструктор
class Square(int):
def __new__(cls, x):
return int.__new__(cls, x * x)
- Переопредяем метод преобразования объекта в строковое представление
class Square:
def __init__(self, x):
self.x = x
def __repr__(self):
return f'{self.x ** 2}'