81 lines
3.2 KiB
Python
81 lines
3.2 KiB
Python
# Intro to Python Dataclasses
|
|
|
|
from dataclasses import dataclass
|
|
|
|
# Here is a fantastic in-depth guide for Data Classes
|
|
# https://www.dataquest.io/blog/how-to-use-python-data-classes/
|
|
|
|
# In Python, a data class is a class that is designed to only hold data values.
|
|
# They aren't different from regular classes, but they usually don't have any
|
|
# other methods. They are typically used to store information that will be
|
|
# passed between different parts of a program or a system.
|
|
|
|
# Data classes automatically create the __init__ method (which is called
|
|
# a "constructor" and will be discussed in a subsequent totorial).
|
|
# This saves a fair bit of coding when a class is designed to just contain
|
|
# attributes/variables, and reduces the liklihood of errors.
|
|
|
|
# A dataclass is created by putting "@dataclass" by itself on the line
|
|
# before the class definition statement
|
|
@dataclass
|
|
class Shape():
|
|
"""
|
|
A class representing a generic shape.
|
|
|
|
Attributes:
|
|
label (str): A text label for this shape
|
|
fill (bool): Whether the shape is filled or outline
|
|
"""
|
|
label: str=""
|
|
fill: bool = True
|
|
|
|
# Dataclasses can inherit from parent classes just like traditional classes.
|
|
# Class inheritance and other class details such as methods will be discussed
|
|
# in more detail in a subsequent tutorial.
|
|
@dataclass
|
|
class Circle(Shape):
|
|
"""
|
|
A class representing a circle shape.
|
|
|
|
Attributes:
|
|
label (str) [parent]: A text label for this shape
|
|
fill (bool) [parent]: Whether the shape is filled or outline
|
|
center_x (int): The x coordinate for the cirlce center
|
|
center_y (int): The y coordinate for the cirlce center
|
|
radius (int): The radius of the circle
|
|
"""
|
|
center_x: int = 0
|
|
center_y: int = 0
|
|
radius: int = 0
|
|
|
|
# In the above class definition, all attributes have default values.
|
|
# This means that a new object can be instantiated without passing
|
|
# any parameters to the class. i.e. my_circle = Circle()
|
|
#
|
|
# Attributes do not have to have default values provided.
|
|
# However, there are two requirements if they do not.
|
|
# 1) All parameters without default values must have values
|
|
# provided when instantiating an object.
|
|
# Such as: my_circle = Circle("Tiny")
|
|
# 2) Attributes without default values MUST be declared in the
|
|
# class definition BEFORE any parameters with default values.
|
|
# They cannot come after.
|
|
|
|
# Instantiate a Circle() object with default values
|
|
my_circle = Circle()
|
|
# Change one of the class variables/attributes
|
|
my_circle.label = "Boss"
|
|
print(my_circle)
|
|
# If values for attributes are passed to the class they must be in the
|
|
# same order as the attributes listed in the class definition.
|
|
# If instantiating a child class then all parent parameters must be
|
|
# specified before those in the child.
|
|
my_circle = Circle("B1", True, 40, 100, 40)
|
|
print(my_circle)
|
|
# Named Parameters: Parameters passed to the class can be named. This
|
|
# serves two purposes. The first is that it makes the instantiation
|
|
# unambiguous which can be helpful if the class has many attributes.
|
|
# The second is that it allows a specific parameter to be assinged
|
|
# a value without specifying all of the intervening parameters.
|
|
my_circle = Circle("But1", radius=40)
|
|
print(my_circle) |