Как реализовать класс (вызов объекта класса как класс)
Помогите с проблемкой нужно реализовать класс, конструктор которого принимает аргумент- длину строки. Объект этого класса при вызове получает на вход один аргумент- строку произвольной длины и возвращает срез на длину строки.
Я написал вот это:
class MyClass():
def __init__(self, length, *args):
self.length = length
self.string = args
def __str__(self):
return ''.join(self.string)[:self.length]
Но работает оно только если передавать 2 аргумента сразу:
a = MyClass(5, "abracadabra")
print(a) # вадает abrac
А должно работать так:
a = MyClass(5)
res = a("abracadabra")
print(res) # должно выдать abrac
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Чтобы объект класса можно было вызывать нужным вам образом, добавьте такой метод в класс:
def __call__(self, *args):
self.string = args
return self
Но учтите, что при этом меняется внутреннее состояние объекта a, лучше так всё-таки не делать, а создавать новые экземпляры класса с нужным состоянием обычным образом. Хотя случаи, конечно, разные бывают.