On 04/27/2013 08:59 PM, Greg Ewing wrote: > Ethan Furman wrote: >> Overriding __init__ is a PITA because __init__ is also called when you do >> >> Planet(3) # get EARTH >> >> and __init__ was expecting a gravitational constant and radius (or something like that). >> >> A couple ways around that: >> >> 1) have the metaclass store the args somewhere special >> >> 2) have a `_init` that the metaclass calls with the args instead of __init__ > > I don't much like either of those. It would be much nicer if > one could just write an ordinary __init__ method and have it > work as expected. Agreed, on both counts. > It's possible to make it work, I think. The __call__ method > of the metaclass is going to have to do something special > anyway, so that Planet(3) can look up and return an existing > instance instead of making a new one. And if it doesn't make > a new instance, it's not going to call the __init__ method. So far I've had that logic in __new__ (which, of course, has no control on whether __init__ is called); I'll check out __call__ as soon as I can. Thanks for the tip! -- ~Ethan~
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4