Python Object-Oriented Python Dice Roller RPG Roller

Kohei Ashida
Kohei Ashida
4,881 Points

Why can't it be [] to create a list instead of cls() in RPG Roller 2 of 2?

I've already solved this challenge but I have one thing not clear. In hands.py, I tried to create a list with rolled = [] but I got "Bammer!" then I changed it to cls() and I got "well done". Is it because Hand() is subclass of list? even if yes, I'm still unclear why [] doesn't work here... Could someone tell me why is it?

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)
hands.py
from dice import D20

class Hand(list):
    @property
    def total(self):
        return sum(self)

    @classmethod
    def roll(cls, size):
        rolled = cls() # why can"t it be [] to create a list instead of cls()?
        for _ in range(size):
            rolled.append(D20())
        return rolled

1 Answer

Steven Parker
Steven Parker
201,997 Points

The challenge asks you to return an instance of the class instead of just a plain list.

Kohei Ashida
Kohei Ashida
4,881 Points

Thank you! So in this challenge, I created the instance named "rolled" of the class named "Hand", right? oh I feel i'm getting a grasp on what class method is doing a bit!