[Tutor] __doc__ strings for attributes?

Evert Rol evert.rol at gmail.com
Fri Nov 9 12:32:51 CET 2007


> How can I add information to an object to explain what it expects as
> it's attributes? For instance I may have an object that creates a CAD
> file based on a set of default values which are set by the __init__
> but can be altered before it runs. for example;

Why don't you specify a doc-string in your class declaration?

class MakeBasicShape:
     """basic information

     detailed information about attributes
     """


But, with what you do, why don't you add parameters to MakeIt()?

     def MakeIt(self, shape='cuboid', bounds=[0.,10.,0.,10.,0.,10.]):
         self.boundsInfo = [shape, bounds]


Or perhaps, let your class be the object you're creating (and rename  
it to 'BasicShape'; verbs in class names seem a bit odd to me)? The  
__init__ method would then fulfill the function of the MakeIt method,  
and things would become:
shape0 = BasicShape()
shape1 = BasicShape('cylinder', [20.,10.,36.])
etc.

That is, unless you're doing other things in your factory object that  
don't show up here.


>     def MakeIt(self):
>         assert self.boundsInfo[0] in self.boundsOptions,
>                "Option not recognised: %s", self.boundsInfo[0]

I also wouldn't use assert, but try: except:  in MakeIt() for example  
(assert is really for debugging, but here it looks more like you're  
trying to prevent user mistakes).


Anyway, hope that that gets you further.

   Evert


>         if self.boundsInfo[0] == 'cuboid'
>             bounds = self.boundsInfo[1]
>             .... # code to make box
>         elif self.boundsInfo[0] == 'cylinder'
>             [height, radius, noSides] = self.boundsInfo[1]
>             .... # code to make cylinder
>         elif self.boundsInfo[0] == 'cad'
>             fileName = self.boundsInfo[1]
>             .... # code to load CAD file
>         return shape
>
>
> if __name__ == '__main__':
>     shapeFactory0 = MakeBasicShape()
>     shape0 = shapeFactory.MakeIt() # a box
>
>     shapeFactory1 = MakeBasicShape()
>     shapeFactory1.boundsInfo = ['cylinder' ,[20.,10.,36]]
>     shape1 = shapeFactory.MakeIt() # a cylinder
>
>     shapeFactory2 = MakeBasicShape()
>     shapeFactory2.boundsInfo = ['cad' ,'/home/Wes/BigHand.stl']
>     shape2 = shapeFactory.MakeIt() # a CAD file
>
> While this example could be coded with different functions for making
> a box, cylinder, and loading the CAD file I wanted to use attributes
> to control the object to simplify interaction with it from the user
> interface code. I would like to move away from getters and setters as
> they're taking up vast chunks of my code at the moment and do very
> little!
>
> Can I also stop new attributes being added to the MakeBasicShape  
> class?
>
> Thanks in advance of any help.
>
> Wesley Brooks
>


More information about the Tutor mailing list