Почему zope.interface не реагирует на неправильное имя атрибута?
Всех приветствую. В книге наткнулся на главу про zope
, решил попробовать на практике, но немного не могу понять результат.
Я так понял, что в пакете есть verifyObject
и verifyClass
для проверки экземпляров и классов на соответствие интерфейсу.
Мой код:
from zope.interface import Attribute, Interface, implementer
from zope.interface.verify import verifyObject, verifyClass
class ITest(Interface):
name = Attribute('Тестовый атрибут!')
def test_met():
"""Тестовый метод"""
@implementer(ITest)
class T:
def __init__(self, name):
self.name = name
def test_met(self):
...
print(verifyObject(ITest, T(name='тест'))) # True
Тут как будто всё в порядке. Если в экземпляре будут какие-то проблемы, то падает ошибка.
from zope.interface import Attribute, Interface, implementer
from zope.interface.verify import verifyObject, verifyClass
class ITest(Interface):
name = Attribute('Тестовый атрибут!')
def test_met():
"""Тестовый метод"""
@implementer(ITest)
class T:
def __init__(self, name):
self.bad_name = name # неправильное имя атрибута
def test_met(self):
...
print(verifyObject(ITest, T(name='тест'))) # zope.interface.exceptions.BrokenImplementation
Если поменять имя метода, то тоже падает ошибка. Код вставлять уже не буду. Вроде бы и так понятно. Тут по сути нет проблем
Но если использовать verifyClass
, то на неправильное имя метода выдаёт ошибку. А если поменять имя атрибута, то он выводит True
from zope.interface import Attribute, Interface, implementer
from zope.interface.verify import verifyObject, verifyClass
class ITest(Interface):
name = Attribute('Тестовый атрибут!')
def test_met():
"""Тестовый метод"""
@implementer(ITest)
class T:
def __init__(self, name):
self.bad_name = name # неправильное имя атрибута
def test_met(self):
...
# Передаю теперь класс, а не экземпляр
print(verifyClass(ITest, T)) # Почему True, если имя атрибута неверное?
Подскажите, где я ошибся и что не так понял?