Jerry Avila5,523 Points
I am not sure what is wrong with my code
Stuck on this challenge not sure what is wrong with the code.
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, die_class=None, *args, **kwargs): if not die_class: raise ValueError("You must provide a die class") super().__init__() @property def total(self): return sum(self) @classmethod def roll(cls, self, die_class =D20): self = cls() for _ in range(): dice.append(die_class()) return cls(self)
Steven Parker207,972 Points
A few things stand out at first glance:
- "self" won't be passed to a class method (your next line makes one using cls)
- append the die to "self" instead of "dice"
- "self" is already an instance, just return it without calling "cls" again
UPDATE: Something I didn't notice the first time is that you added an override of "init" which changes the calling signature (and prevents it from working as expected by the challenge).
You don't need an override at all here.