This project was developed in object-oriented programming with three classes, a base and two other subclasses to represent rectangles and squares. Tests were also created for all classes using the unittest
module.
This project contains these topics:
- Imports
- Exceptions
- Private attributes
- Getter/setter
- Class/static methods
- Inheritance
- File I/O
- *args and **kwargs
- JSON serialization/deserialization
- Unittesting
main_files/
- Main functions provided by Holberton School to test the files.
tests/test_models/
: Test files usingunittest
:
Base
base.py
- Represents the "base" class for all other classes in the project. Includes:
- Private class attribute
__nb_objects = 0
. - Public instance attribute
id
. - Class constructor
def __init__(self, id=None)
.- If
id
isNone
, increments__nb_objects
and assigns its value to the public instance attributeid
. - Otherwise, sets the public instance attribute
id
to the providedid
.
- If
- Static method
def to_json_string(list_dictionaries)
that returns the JSON string representation oflist_dictionaries
.- If
list_dictionaries
isNone
or empty, returns the string"[]"
.
- If
- Class method
def save_to_file(cls, list_objs)
that writes the JSON string representation oflist_objs
to a file.- The parameter
list_objs
is a list of instances who inherits ofBase
. - If
list_objs
isNone
, saves an empty list. - The file is saved with the name
<classname>.json
. - Overwrites the file if it already exists.
- The parameter
- Static method
def from_json_string(json_string)
that returns the list of the JSON string representationjson_string
.- The parameter
json_string
is a string representing a list of dictionaries. - If
json_string
isNone
or empty, the function returns an empty list.
- The parameter
- Class method
def create(cls, **dictionary)
that returns an instance with all attributes already set.- Instantiates an object with the attributes given in
**dictionary
.
- Instantiates an object with the attributes given in
- Class method
def load_from_file(cls)
that returns a list of instances.- Reads from the JSON file
<classname>.json
. - If the file doesn't exist, the function returns an empty list.
- Reads from the JSON file
Rectangle
rectangle.py
- Represents a rectangle. Inherits from Base
with:
- Private instance attributes
__width
,__height
,__x
, and__y
.- Each private instance attribute features its own getter/setter.
- Class constructor
def __init__(self, width, height, x=0, y=0, id=None)
.- If either of
width
,height
,x
, ory
is not an integer, raises aTypeError
exception with the message<attribute> must be an integer
. - If either of
width
orheight
is <= 0, raises aValueError
exception with the message<attribute> must be > 0
. - If either of
x
ory
is less than 0, raises aValueError
exception with the message<attribute> must be >= 0
.
- If either of
- Public method
def area(self)
that returns the area of theRectangle
instance. - Public method
def display(self)
that prints theRectangle
instance tostdout
using the character#
.- Prints new lines for the
y
coordinate and spaces for thex
coordinate.
- Prints new lines for the
- Overwrite the
__str__
method to returns aRectangle
instance in the format[Rectangle] (<id>) <x>/<y> - <width>/<height>
. - Public method
def update(self, *args, **kwargs)
that updates an instance of aRectangle
with the given attributes.*args
is supplied in the following order:- 1st:
id
. - 2nd:
width
. - 3rd:
height
. - 4th:
x
. - 5th:
y
.
- 1st:
**kwargs
is a dictionary of new key/value attributes to update theRectangle
instance.**kwargs
is skipped if*args
exists.
- Public method
def to_dictionary(self)
that returns the dictionary representation of aRectangle
instance.
Square
square.py
- Represents a square. Inherits from Rectangle
with:
- Class constructor
def __init__(self, size, x=0, y=0, id=None)
.- The
width
andheight
of theRectangle
superclass are assigned using the value ofsize
.
- The
- Overwrite the
__str__
method to print aSquare
instance in the format[Square] (<id>) <x>/<y> - <size>
. - Public method
def update(self, *args, **kwargs)
that updates an instance of aSquare
with the given attributes.*args
must be supplied in the following order:- 1st:
id
. - 2nd:
size
. - 3rd:
x
. - 4th:
y
.
- 1st:
**kwargs
is a dictoinary of new key/value attributes to update theSquare
instance.**kwargs
is skipped if*args
exists.
- Public method
def to_dictionary(self)
that returns the dictionary representation of aSquare
instance.
- Felipe Villamizar - GitHub