Python Object-Oriented Python Dice Roller RPG Roller

Linos Mtembu
Linos Mtembu
11,152 Points

'hand' doesn't have 'roll method'

hands.py

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):
        super().__init__(sides=20)

        from dice import D20

class Hand(list):
    def __init(self, size=0, die_class=None, *args, **kwargs):
        super().__init__()

        for _ in range(size):
            self.append(die_class())

    def __len__(self):
        return super().__len__()

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

    @classmethod
    def roll(cls, size_in):
        return cls(size=size_in, die_class=D20)
hands.py
class Hand(list):
    @property
    def total(self):
        return sum(self)

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 59,891 Points

The Hand class code should be in the hands.py file.

As shown above, the hands.py contains a simple class definition that has no classmethod.