On Mar 29, 11:16 pm, Chris Rebert <c...@rebertia.com> wrote: > 2009/3/29 Scott David Daniels <scott.dani...@acm.org>: > > > mark.sea...@gmail.com wrote: > > >> On Mar 29, 9:52 pm, Chris Rebert <c...@rebertia.com> wrote: > > >>> On Sun, Mar 29, 2009 at 9:18 PM, <mark.sea...@gmail.com> wrote: > > >>>> ... > > >>> ... Also, you shouldn't use `class_ ` as the name of the first argument > >>> to > >>> __new__(). Use `cls` instead since that's the conventional name for > >>> it. > > > Actually, according to PEP 8, class_ is the preferred name. > > In other contexts where you have a class as a variable, yes, but not > in the case of classmethods such as this. See the docs for __new__ > itself for example > (http://docs.python.org/reference/datamodel.html#object.__new__). > > >>> My best guess as to what you're trying to do is (completely untested): > >>> class myclass(long): > >>> def __new__(cls, init_val, reg_info): > >>> print reg_info.message > >>> instance = long.__new__(cls, init_val) > >>> instance.reg_info = reg_info > >>> return instance > > > Normally, these changes are done in the __init__ phase (post-instance > > creation), so you might go for something like: > > I think the whole reason he's using __new__ instead of __init__ is > because of this tidbit from the aforementioned __new__() docs: > """ > __new__() is intended mainly to allow subclasses of immutable types > (like int, str, or tuple) to customize instance creation. It is also > commonly overridden in custom metaclasses in order to customize class > creation. > """ > > Cheers, > Chris > > -- > I have a blog:http://blog.rebertia.com
It seems like there's no way to do what I'm trying. I am confined to Python 2.5.3 for business reasons. So I want a class ShadowRegister, which just has a value that I can do get/set bit sel and slice ops. I got that working with __init__. It was subclass from "object". Then I wanted a RegisterClass that was a subclass of ShadowRegister, which would read a hardware register before doing get bit sel/slices, or read HW reg, do set bit sel/slice, but when I try to print in hex format ('0x016X') it said it required an int (but the ShadowRegister class had no issues). Then I was told instead of using object I could subclass as long (seemed the only solution for Python 2.5). Then when I started to want to add my own init code (like register length in bits), I was told I should use __new__ instead of __init__. So but ever since then I've noticed that my value is not changing from the initially set value. I'm really cornfused now. -- http://mail.python.org/mailman/listinfo/python-list