Kent Johnson wrote: > Try this: > > def fromFile(path): > adict = {} > alist = [] > #... > #some part to read a file and to process data > return MyClass(parameter1,parameter2,...,d) > fromFile = staticmethod(fromFile) > > then client code will look like this: > aClass = MyClass.fromFile('a/file/path')
A few more notes: - There is no need to make fromFile a staticmethod of MyClass, it could also be a module level function. Writing it as a staticmethod puts it in the namespace of MyClass which may be handy. - If you intend to subclass MyClass, the subclass constructors have compatible signatures and you want to be able to create subclasses with the same factory, a classmethod might work better. >>> class A(object): ... def __init__(self, val): ... self.val = val ... def show(self): ... print 'A.val:', self.val ... def factory(cls, val): ... return cls(val) ... factory = classmethod(factory) ... >>> a=A.factory(3) # calls A.factory(A, 3) >>> a.show() A.val: 3 >>> >>> class B(A): ... def show(self): ... print 'B.val:', self.val ... >>> b=B.factory(22) # calls A.factory(B, 22) >>> b.show() B.val: 22 - Finally, if you are using Python 2.4, you may prefer the decorator syntax for defining classmethods and staticmethods: class A(object): ... @classmethod def factory(cls, val): return cls(val) Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor