Martin Höfling wrote:
Hi there,
is it possible to put the methods of a class in different files? I just
want to order them and try to keep the files small.
Regards
Martin
You could use something like this:
"""
Example usage:
>>class Person(object):
.... def __init__(self, first, last):
.... self.first = first
.... self.last = last
....
>>john = Person('John', 'Smith')
jane = Person('Jane', 'Smith')
class Person(extend(Person)):
.... def fullname(self):
.... return self.first + ' ' + self.last
....
>>john.fullname()
'John Smith'
>>jane.fullname()
'Jane Smith'
"""
def extend(cls):
extender = object.__new__(Extender)
extender.class_to_extend = cls
return extender
class Extender(object):
def __new__(cls, name, bases, dict):
# check that there is only one base
base, = bases
extended = base.class_to_extend
# names have to be equal otherwise name mangling wouldn't work
if name != extended.__name__:
msg = "class names are not identical: expected %r, got %r"
raise ValueError(msg % (extended.__name__, name))
# module is added automatically
module = dict.pop('__module__', None)
if module is not None:
modules = getattr(extended, '__modules__', None)
if modules is None:
modules = extended.__modules__ = [extended.__module__]
modules.append(module)
# replace the docstring only if it is not None
doc = dict.pop('__doc__', None)
if doc is not None:
setattr(extended, '__doc__', doc)
# now patch the original class with all the new attributes
for attrname, value in dict.items():
setattr(extended, attrname, value)
return extended
Ziga