[python] vzor Observer a predavani metody v parametru
Ondrej Penicka
penicka na web2day.org
Pátek Březen 31 13:25:03 CEST 2017
Zdravim,
pri implementaci vzoru observer jsem narazil na problem s predavanim
metody vychozi tridy vsech pozorovatelu. Subjekt je trida sledovaneho
objektu, Observer vzorova trida pro pozorovatele a ConcreteObserver
priklad pozorovatele. Zadrhel je v tride myList, ktera udrzuje seznam
pozorovatelu a definuje funkci call, ktera pro kazdou polozku zavola
predanou funkci (Observer.update). Pri volani predane funkce s objektem
jako parametr (namisto self) se samozrejme vola funkce Observer.update
namisto ConcreteObserver.update i kdyz self ukazuje na instanci
ConcreteObserver.
class myList:
def call(self, function, subject):
for item in self.list:
function(item, subject);
class Subjekt:
def __init__(self):
self.observers = myList
def updateAll(self):
self.myList.call(Observer.update, self)
class Observer:
def update(self, subjekt):
print "virtual Observer method called"
class ConcreteObserver(Observer):
def update(self, subjekt):
print "change something"
Neprilis elegantni reseni je v metode Observer.update volat
self.update_real()
class Observer:
def update(self, subjekt):
self.update_real(subjekt)
class ConcreteObserver(Observer):
def update_real(self, subjekt):
print "change something"
Pravdepodobne je to dusledek toho, ze se v pythonu i trida chova jako
objekt.
Neni nejake lepsi reseni, aniz bych zasahoval do tridy myList?
Diky, Ondrej Penicka
Další informace o konferenci Python