Top.Mail.Ru
Ответы

Пример из книги "Byte of Python" не работает, помогите понять почему (

(Вопрос решен, проблема была в отступах)

Вообщем есть код из главы 14.7 Метаклассы, стр 118
Я его переписал и несколько раз проверил (возможно все-таки ошибся))
Как я понял этот код создает класс и два его подкласса, причем запрещается
создавать экземпляры родительского класса, по идее все должно работать.
Python ругается что класс SchoolMember() не имеет метода .tell()
Это не первая ошибка которую я встречал.
Был еще пример копирования строки с помощью полной вырезки,
может раньше так можно было делать, а вот сейчас так не получится.
Может тут тоже ошибка связанная с новой версией Python
Моя версия - 3.9.4
Версия в книге - 3.3.0

Вот сам код:

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}" Возраст:"'.format(self.name, self.age), end = ' ')

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('(Создан Student: {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)
# создание объекта класса SchoolMember приведет к ошибке

print()

members = [t,s]
for member in members:
~member.tell()

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

В онлайн интерпретаторах выполняется
https://ideone.com/lopPGG
https://www.programiz.com/python-programming/online-compiler/

----------------
stdout

(Создан SchoolMember: Mrs.Shrividya)
(Создан Teacher: Mrs.Shrividya
(Создан SchoolMember: Swaroop)
(Создан Student: Swaroop

Имя:" Mrs.Shrividya" Возраст:" Зарплата: "30000"
Имя:" Swaroop" Возраст:" Оценки: "75"

-----------------
Какие там версии х. з, но из-за разницы 3.9.4, 3.3.0 не должно. Потому, что сообщение об ошибке относится к самому классу, а не к каким-то отличиям в синтаксисе.