Zope.interface в Django
Я работаю на Java и сейчас работаю над приложением django. Нужен ваш вклад, если я нахожусь в неправильном направлении.
Я пытаюсь реализовать zope.interface.Interface в моем Django приложении и пытаюсь достичь того, что делают интерфейсы в Java, но он не выдает никакой ошибки, если класс реализатора не предоставляет определение всех методов в интерфейсе.
Вот мой пример реализации.
import zope.interface
class MyInterface(zope.interface.Interface):
x = zope.interface.Attribute("foo")
def method1(self, x):
pass
def method2(self):
pass
@zope.interface.implementer(MyInterface)
class MyClass:
def method1(self, x):
return x**2
def method2(self):
return "foo"
@zope.interface.implementer(MyInterface)
class MyClass2:
def method1(self, x):
return x**2
print(list(zope.interface.implementedBy(MyClass)))
print(list(zope.interface.implementedBy(MyClass2)))
c = MyClass()
print(c.method1(5))
print(c.method2())
d = MyClass2()
print(d.method1(5))
Помогите мне узнать, что я делаю не так, и ваше доброе руководство.
Спасибо,
Я собираюсь использовать MetaClass вместо Zope Interface. Вот решение
class IStudent(type):
def __new__(cls, name, bases, attrs):
print("New from Interface")
x = super().__new__(cls, name, bases, attrs)
# Functions to be implemented
if(not hasattr(x, 'test')):
x.test = lambda self: print("Method not implemented")
return x
class Student1(metaclass=IStudent):
def __init__(self):
print("Init from Student1")
class Student2(metaclass=IStudent):
def __init__(self):
print("Init from Student2")
def test(self):
print("This is implemented method from Student 2")
std1 = Student1()
std2 = Student2()
std1.test()
std2.test()