OOP : Trying to design a good class structure
<p>Follow up code snippet review question I posted: <a href="http://codereview.stackexchange.com/questions/143576/oop-designing-class-inheritances">http://codereview.stackexchange.com/questions/143576/oop-designing-class-inheritances</a></p>

<p>This is homework so off the bat I am not asking to do it for me but to clarify for me so that I understand.</p>

<p>Here is what the assignment said about the program I have to write:</p>

<p><strong>Required:</strong>
Write an OO Python Program showing how your sub-classes inherit from the super-class(es) You can have one class (preferred but not a must) or two or more super classes.</p>

<p>What I have to do is write a oo python program showing sub-classing inherited by a class or two or more superclasses. The program has to be about shapes. As an example of what I mean by that is:</p>

<p>Shape: Square</p>

<p>Attributes:</p>

<ul>
<li>length </li>
<li>width</li>
</ul>

<p>Methods:</p>

<ul>
<li>area</li>
<li>perimeter</li>
</ul>

<p>I have more shapes of course but from that I find the common attributes and methods from all the shapes and make superclasses and sup-classes.</p>

<p>My super classes are like: 2dShapes, circles and 3dShapes. My sub-classes are like length and width. My methods are area and perimeter. Note I am rambling at this point. The code snippet below does not show this instead I was thinking about making a superclass for attributes and methods and than sub-classes for the shapes? maybe?</p>

<p>Question: is this a good class structure? Is there a better way to structure the classes here? Here is an example of what I'm thinking about how to do this.</p>

<pre><code>class Shapes(attributes):
    def __init__(self):
        attributes.__init__(self)
        # not sure how to go on to make the attributes like height and length, radius ect. Maybe like this???
    def height(self):
        raise NotImplementedError # again this program is not supose to actually do anything. The program is just for us to understand inheritance with classes and super classes.

class 2dShapes(Shapes):
    class Square(self):
        def height(self):
            # ???
</code></pre>

<p>So at this point I am so confused about where to start. Also I am super new to python so be gentle to me  :p</p>

<p>Let's start with the Shapes class. In the __init__ , you have to set the attributes. First you need 2 parameters other than self. You can use the same names as the attributes or pick different names.</p>

<pre><code>class Shapes(attributes):
    def __init__(self, length, width):
        self.length = length
        self.width = width
</code></pre>

<p>If you want to inherit from Shapes class, other than putting it in () in 2dShapes class definition, you have to call the __init__ of the Shapes class and pass a reference and other parameters to it, like this:</p>

<pre><code>class 2dShapes(Shapes):
    def __init__(self, length, width):
        Shapes.__init__(self, length, width)
</code></pre>

<p>If you want to use a method of Shapes in 2dShapes, you have to call it just like how we did for the __init__, lets say there is a method called area() in Shapes. In the 2dShapes, you can access it by Shapes.area(self). Here is an example:</p>

<pre><code>class Shapes(attributes):
    def __init__(self, length, width):
        self.length = length
        self.width = width
    def area(self):
        return self.length * self.width

class 2dShapes(Shapes):
    def __init__(self, length, width):
        Shapes.__init__(self, length, width)
    def area(self):
        return Shapes.area(self)
</code></pre>

python python-3.x oop inheritance