Python Object-Oriented Python Dice Roller RPG Roller

Amelia Nakimuli
Amelia Nakimuli
3,242 Points

Make the code work

How can I better this code so that it will work?

dice.py
import random


class Die:
    def __init__(self, sides=2):
        if sides < 2:
            raise ValueError("Can't have fewer than two sides")
        self.sides = sides
        self.value = random.randint(1, sides)

    def __int__(self):
        return self.value

    def __add__(self, other):
        return int(self) + other

    def __radd__(self, other):
        return self + other

class D20(Die):
    def __init__(self, *args, **kwargs):
        super().__init__(sides=20, *args, **kwargs)
hands.py
class Hand(list):

    def __init__(self, num = None, *args, **kwargs):
        super().__init__()

    @classmethod
    def roll(cls, size):
        num = []
        for item in range(size):
            num.append(D20().value)
        return num

    @property
    def total(self):
        return sum(self)

1 Answer

Steven Parker
Steven Parker
202,109 Points

Two issues stand out at first glance:

  • the list should contain complete D20 objects, not just their values
  • instead of returning the list itself, the method should return a new instance with the list in it.