[C++-sig] Re: FW: Injected constructors
Nicodemus
nicodemus at globalite.com.br
Thu Jul 24 17:07:26 CEST 2003
Roman Yakovenko wrote:
>class MyClass
>{
>...
> MyClass(); //after constructing object stays in state 1
> MyClass( int i ); //after constructing object stays in state 2
> MyClass( const YourClass &x); //after constructing object stays in state 3
>...
>};
>
>Now if I understand right there is a need in other state of the MyClass object.
>
>MyClass make_myclass_from_other( const SomeOther &y );
>
>BOOST_PYTHON_MODULE(staticmethod_ext)
>{
> class_<MyClass>
> ...
> .staticmethod(make_myclass_from_other)
>...
>
>While in python I'll write
>obj = MyClass.make_myclass_from_other( third_party_class )
>
>As for me it is much clear then adding an other constructor for the class.
>At the moment I wrote I thought about class that already has a few constructors.
>Now I understand that it is not the only case. May be you have nice small class with
>one constructor and you want to add an other one.
>
>
On a side note, this is a good reason to use classmethods in Python:
class ConfigurationLoader(object):
'''loads configuration from a filename or a file-like object.
'''
def __init__(self, file_object):
self.file = file_object
def FromFileName(cls, filename):
self = cls(file(filename))
return self
FromFileName = classmethod(FromFileName)
# usage
config = ConfigurationLoader.FromFileName('test')
This avoids having to do type checking in the __init__ method, plus it
makes the code a little more readable. 8)
More information about the Cplusplus-sig
mailing list