On 07/15/2010 08:45 PM, Karsten Wutzke wrote: > On 15 Jul., 20:28, Thomas Jollans <tho...@jollans.com> wrote: >> On 07/15/2010 07:58 PM, Karsten Wutzke wrote: >> >>> Hello, >> >>> this is obviously a Python OO question: >> >>> Since Python isn't stringly typed, >> >> I expect this is an innocent typo, and you mean strictly. >> >>> single-dispatch isn't available per se. So is the "double-dispatch" Visitor >>> pattern, >> > > Yes, typo, I meant strictly. > >> Wait, what? >> First of all, python is strictly typed in that every object has exactly >> one type, which is different from other types. So you can't do "1"+2, as >> you can in some other languages. >> >> Anyway, this is interesting: Tell me more about how Python's dynamic >> nature makes it impossible to do whatever you're trying to do. I'm >> baffled. What are you trying to do, anyway? >> >>> which is usually used >>> in OO systems to implement code generators. So, what is the de facto >>> method in Python to handle source code generation? >> >> WHOA! Now if that isn't a Gedankensprung. Also, I'm still very far from >> your train of thought, apparently: Now, the thing that code generators >> probably share is that they write code to files. It depends on what I'm >> trying to do of course, but I expect there's a good chance that if I >> wrote a code generator in Python, it wouldn't be particularly >> object-oriented at all. > > Well, I'm most experienced in OO, so writing OO in Python seems like > the way to start with Python. The visitor pattern uses single- > dispatch, that is, it determines which method to call be the type of > object passed in. I did some reading and it turned out that Python > can't do it without some tricks (function decorators and 3rd party > code).
Well, yes: the name of a function or method refers to a single callable object and piece of code. if you care about the type of the argument, you must say so explicitly: class A: def dothing(self, obj): if isinstance(obj, str): self.dostringthing(obj) elif isinstance(obj, (int,float)): self.donumberthing(obj) else: self.dogenericthing(obj) # ... while python doesn't have C++-style function overloading, its alternative also doesn't have the limitations that come with it. -- http://mail.python.org/mailman/listinfo/python-list