Я хочу вызвать исключение, если пользователь неправильно набрал имя атрибута абстрактного класса, и вместо переопределения добавлен новый атрибут класса:
class FooAbstract:
default_value = 'spam' # This could be overriden
class MyFoo(FooAbstract):
defualt_value = 'bar' # A user mistyped the name and he should be notified
Я думаю, difflib.SequenceMatcher
можно использовать для проверкинедавно добавленные имена переменных:
from difflib import SequenceMatcher
orig_names = set([a for a in dir(FooAbstract) if not a.startswith('__')])
new_names = set(dir(MyFoo)) - set(dir(FooAbstract))
for orig_name in orig_names:
for new_name in new_names:
if 0.9 < SequenceMatcher(a=orig_name, b=new_name).ratio() < 1:
message = f'You probably misstyped "{new_name}" (use "{orig_name}" instead)'
raise AttributeError(message)
Мой вопрос: куда мне поместить это условие, чтобы выполнить его во время загрузки подкласса MyFoo
?