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

Reply via email to