Добрый день, товарищи! Есть четыре задания на Phyton. Я их вроде бы сделал, но преподаватель сказал, что 3-я - это неработающая вторая. Не работает потому, что адаптер зарегистрирован под одним именем, а при адаптации объекта появляется попытка найти адаптер с др. (пустым) именем. Нужно 3 - ю переделать с помощью MVC, и 4-ю - разработка прокси-адаптера, позволяющего делать удаленные вызовы. Помогите с этими заданиями. Первая и вторая работа правильные, а вот 3я нет. Вот сами работы: Первая: | Код | from zope.interface import Interface from zope.interface import Attribute from zope.interface import implements from zope.interface import implementedBy from zope.interface import providedBy
#Наличие необходимых методов и атрибутов объекта теперь гарантируется наличием АБК (абстрактных базовых классов) среди предков класса
class ILifo(Interface): #определим класс ILifo. Этот класс будет наследоваться от класса zope.interface ( родительского класса для всех интерфейсов) data=Attribute("Massiv") head=Attribute("Golova") tail=Attribute("Hvost") def add(self,number): #определяем функцию добавления при помощи оператор def """add element """ #добавить элемент def deleteelement(): #определяем функцию удаления элемента """del element """ #удаление элемента def editlast(NewAttribute): #определяем функцию редактирования элемента """chandge element""" #выбираем элемент
class Lifo(object): #определим класс Lifo, который будет реализовывать Lifo implements(ILifo) def __init__(self): #_init_ - это конструктор класса. В качестве первого формального аргумента метода принято использовать self self.data={} #data - атрибут self.tail=0 #tail - атрибут for i in range(10): self.data[i]=i self.head=i self.head=0 def add(self,number): #определяем функцию добавления if (self.head==len(self.data)-1)or(self.head<self.tail): # len - это длина атрибута data. self.head=self.tail self.tail=self.tail+1 else: self.head=self.head+1 self.data[self.head]=number def editlast(self,NewNumber): #определяем функцию редактирования "EditLast"
def deleteelement(self): #определяем функцию удаления элемента if self.head<>self.tail: self.data[self.head]=0 if (self.head>self.tail): self.head=self.head-1 else: if self.head==0: self.head=len(self.data) else: self.head=self.head-1
def test(): #определяем функцию для проверки - test print "--- Interface test routine for bufer" h = Lifo() assert ILifo.implementedBy(Lifo)==True #Для утверждений применяется специальный оператор assert assert ILifo.providedBy(h)==True assert ILifo.providedBy('')==False for i in range(len(h.data)): print h.data[i] print "-----------" h.add(123) #Здесь вызывается метод __add__() h.add(321) h.add(661) h.add(662) h.add(663) h.add(664) h.add(665) h.add(666) h.add(13) h.add(14) for i in range(len(h.data)): print h.data[i] print "all right" if __name__ == "__main__": test()
|
Вторая: | Код |
import os from stat import * from zope.interface import Interface from zope.interface import Attribute from zope.interface import implements from zope.interface import implementedBy from zope.interface import providedBy
class IFile(Interface): #определяем класс IFile file = Attribute(u'File name.') #атрибут - наш файл def getContent(self): #определяем функцию, получающую содержимое файла 'Get content of file' #получение содержимого файла def getSize(self): #определяем функцию, определяющую размер файла 'Get size of file' #получение размера файла def append(self,text): #определяем функцию добавления текста в файл 'Append text in file' #добавление текста в файл def getCTA(self): 'Put lines from file to array'
class File(object): #определяем класс File, которые будет реализовывать класс IFile implements(IFile) body = 'foo bar' def __init__(self,file): #вызываем конструктор класса self.file = file def getContent(self): #получаем содержимое файла fd = open(self.file,'r') #открываем наш файл cont = fd.read() #читаем содержимое fd.close() #закрываем файл return cont #возвращаем содердимое def getSize(self): #получаем размер файла fd = open(self.file,'r') #открываем наш файл st = os.fstat(fd.fileno()) fd.close() #закрываем файл return st[ST_SIZE] #возвращаем размер файла def append(self,text): #добавляем текст в файл fd = open(self.file,'ab') #открываем файл, в который будем добавлять текст fd.write(text) #пишем сам текст fd.close() #закрываем файл def getCTA(self): lines=[] fd = open(self.file,'r') #открываем файл lines = fd.readlines() #узнаем количество строк fd.close() #закрываем файл return lines
def test(): #тестируем print "--- Interface test routine for File" f = File('file_interf.py') #наш файл assert IFile.implementedBy(File)==True #используем assert для утверждения assert IFile.providedBy(f)==True assert IFile.providedBy('')==False print "test ok"
if __name__ == "__main__": test()
|
И вот неправильно работающая третья, которую нужно подправить немного: | Код | import sys from zope.interface import implements from zope.component import adapts from zope.component import getGlobalSiteManager sys.path.append(u'G:\\')
from Zad2 import * #используем вторую работу Zad2 import Zad1 class AdaptInterface(object): #определяем класс AdaptInterface - наш адаптер implements(IFile) adapts(Zad1.ILifo) #адаптируемся к классу ILifo из первой работы Zad1 def __init__(self, lifo): #вызываем конструктор self.Lifo = lifo def getContent(self): #определяем функцию получения содержимого self.Lifo.GetItems() #получаем строки def getSize(self): #определяем функцию для определения размера self.Lifo.leng() #длина def append(self,text): #определяем функцию для додавбления текста raise RuntimeError, "could not be implemented" #возможная ошибка def getCTA(self): self.Lifo.getContent() def test_adapter(): lifo=Zad1.Lifo() adapter=IFile(lifo, alternate="none found") print adapter print "test OK" if __name__== "__main__": gsm = getGlobalSiteManager() gsm.registerAdapter(AdaptInterface, name = 'adapt') #регистрируем наш адаптер test_adapter()
|
Заранее благодарю за помощь вас.
|