Open1

python dataclassに対する多態

yoda keisukeyoda keisuke
from typing import Protocol
from dataclasses import dataclass

class Shape(Protocol):
    def area(self) -> float:
        pass

@dataclass
class Circle:
    radius: float

    def area(self) -> float:
        return 3.14 * self.radius * self.radius

@dataclass
class Rectangle:
    width: float
    height: float

    def area(self) -> float:
        return self.width * self.height

def print_area(shape: Shape) -> None:
    print(f"The area is {shape.area()}")

if __name__ == '__main__':
    circle = Circle(radius=5)
    rectangle = Rectangle(width=10, height=20)

    print_area(circle)    # -> The area is 78.5
    print_area(rectangle) # -> The area is 200