Метод __str__
класса python определяет, как этот класс будет преобразован в строку. Я написал небольшой пример с использованием предоставленного вами кода, чтобы показать, что:
class TestHelper:
def __init__(self, pk):
self.pk = pk
class Test:
def __init__(self, observer_pk, habit_pk):
self.observer = TestHelper(observer_pk)
self.habit = TestHelper(habit_pk)
def __str__(self):
return f"User: {self.observer.pk} => Habit: {self.habit.pk}"
t = Test(5, 8)
print(t)
Если вы запустите этот код, результат будет напечатан User: 5 => Habit: 8
, так как метод print
автоматически преобразует свои аргументы в строки , Вы можете заменить '=>' на то, что хотите, и вместо этого он будет напечатан. Если вы закомментируете метод __str__
, будет напечатан <__main__.Test object at some_hex_address>
- это то, что делает метод __str__
по умолчанию, унаследованный от класса object
. Вы можете преобразовать свой класс в строку, как хотите - это полностью ваше дело