Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Object-Oriented Python Dice Roller RPG Roller

Youssef GHALEM
seal-mask
.a{fill-rule:evenodd;}techdegree
Youssef GHALEM
Python Development Techdegree Student 4,143 Points

I got this message : Can't get the length of a `Hand` eventhough I'm not asked to provide the __len__ meth for hand cld

Check my code please

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)

    def roll(self, number_of_dice) :
        slots = []
        for _ in range(number_of_dice) : 
            slots = []
            slots.append(D20())
        return slots

1 Answer

Steven Parker
Steven Parker
229,732 Points

The message may be confusing, but it just means that something is wrong with the class. Issues I notice:

  • the instructions ask for a classmethod, but the decorator that creates one is missing
  • the loop keeps setting "slots" to an empty list (so it never has more than one item in it)
  • the method is returning the list itself instead of a new instance with the list in it

About that last issue, I recall distinctly that being a requirement of this challenge (and it still is, I tried it); but the instructions seem to have been recently changed to say "Then return the list"! So the instructions are no longer correct.

Please report this to the Support staff and collect your "Exterminator" :beetle: badge for being the first to find it.