но если отдельно прописать для какого-нибудь объекта tell, но None нету( t.tell() к примеру )
Если я правильно понял, то вы о том, что если выполнить:
t = Teacher('Nina Petrovna', 50, 30000)
t.tell()
то None не будет выведен?
None появляется потому что вы вызываете печать, так что если напишите
t = Teacher('Nina Petrovna', 50, 30000)
print(t.tell())
то точно так же увидите None.
Я понимаю, что в методе отсутствует return, от этого и None вылезает
Все правильно,
tell()
возвращает None, вы этот None и выводите на экран. Вы явно запутались с print/return. Для вашей реализации вам не нужно делать
print(obj.tell())
, потому что нужные принты вы вызваете в самом методе.
Так что правильнее будет написать такой код:
for member in members:
member.tell()
Оборачивать ваш метод в print() имеет смысл только тогда, когда вы не печатаете текст в самом методе, а только подготовливаете правильное предложение и возвращаете его через return.
def tell(self):
return 'Имя {}, возраст {}'.format(self.name, self.age)
При вызове такого метода, вы не получите никакой вывод на экран:
s = Students('Carl', 20, 80)
s.tell()
Но зато вы можете сохранить результат работы в переменную и использовать ее потом, либо отправить сразу в print():
s = Students('Carl', 20, 80)
print(s.tell())
# либо
s = Students('Carl', 20, 80)
resutl = s.tell()
print(result)