Доброго времени суток, уважаемые форумчане. Я пошарился по разным темам, но более подходящего места для своего вопроса не нашел.
В общем код из книги Byte of Python, тема Метаклассы. Я набрал код, но он полностью не выполняется. Проверил на несколько раз, ошибку найти не могу. Уповаю на вас
from abc import *
class SchoolMember(metaclass=ABCMeta):
'''Представляет любого человека в школе.'''
def __init__(self, name, age):
self.name = name
self.age = age
print('(Создан SchoolMember: {0})'.format(self.name))
@abstractmethod
def tell(self):
'''Вывести информацию.'''
print('Имя: "{0}" Возраст: "{1}"'. Format(self.name, self.age), emd = " ")
class Teacher(SchoolMember):
'''ПРедставляет преподавателя.'''
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print('(Создан Teacher: {0})'.format(self.name))
def tell(self):
SchoolMember.tell(self)
print('Зарплата: "{0:d}"'.format(self.salary))
class Student(SchoolMember):
'''Представляет студента.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print('(Создан студент: {0})'.format(self.name))
def tell(self):
SchoolMember.tell(self)
print('Оценки: "{0:d}"'.format(self.marks))
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)
# m = SchoolMember('abc', 10)
# Это приведёт к ошибке: "TypeError: Can't instantiate abstract class
# SchoolMember with abstract methods tell"
print() # печатает пустую строку
members = [t, s]
for member in members:
member.tell() # Работает, как для преподователя, так и для студента
Код выдает только:
(Создан SchoolMember: Mrs. Shrividya)
(Создан Teacher: Mrs. Shrividya)
(Создан SchoolMember: Swaroop)
(Создан студент: Swaroop)
А дальше ошибка:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-19-5876c9838b12> in <module>
58 members = [t, s]
59 for member in members:
---> 60 member.tell() # Работает, как для преподователя, так и для студента
<ipython-input-19-5876c9838b12> in tell(self)
33
34 def tell(self):
---> 35 SchoolMember.tell(self)
36 print('Зарплата: "{0:d}"'.format(self.salary))
37
<ipython-input-19-5876c9838b12> in tell(self)
23 def tell(self):
24 '''Вывести информацию.'''
---> 25 print('Имя: "{0}" Возраст: "{1}"'. Format(self.name, self.age), emd = " ")
26
27 class Teacher(SchoolMember):
AttributeError: 'str' object has no attribute 'Format'
А по книге, должен еще дописать:
Имя:“Mrs. Shrividya” Возраст:“40” Зарплата: “30000”
Имя:“Swaroop” Возраст:“25” Оценки: “75”
Прошу прощения, если не правильно оформил вопрос, готов выслушать и взять на вооружение все замечания. Благодарю, всем удачи!