簡體   English   中英

Django 中的 Zope.interface

[英]Zope.interface in Django

我來自 Java 背景,現在正在開發 django 應用程序。 如果我的方向錯誤,需要您的意見。

我正在嘗試在我的 Django 應用程序中實現 zope.interface.Interface 並嘗試實現 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM