Joshua Landau wrote: > Unless you have a very good reason, don't do this. It's a damn pain > when functions won't accept my custom types with equivalent > functionality -- Python's a duck-typed language and it should behave > like one.
In that case what's the pythonic way to deal with standard cases like this one? <code> class SomeModel(object): def __init__(self): self.label = "this is a label attribute" def accept(self, visitor): visitor.visit(self) print("visited: ", self.label) class AbstractVisitor(object): def visit(self, element): pass class ConcreteVisitorA(AbstractVisitor): def visit(self, element): element.label = "ConcreteVisitorA operated on this model" class ConcreteVisitorB(AbstractVisitor): def visit(self, element): element.label = "ConcreteVisitorB operated on this model" model = SomeModel() operatorA = ConcreteVisitorA() model.accept(operatorA) operatorB = ConcreteVisitorB() model.accept(operatorA) not_a_valid_type = "foo" model.accept(not_a_valid_type) </python> Rui Maciel -- http://mail.python.org/mailman/listinfo/python-list