Max Palmer2,920 Points
Questions regarding classmethods and self.append
Not sure what is going wrong here. Think I may be something to do with the append, as previously I noted that it only works with the self argument, so it would update the current instance (hand) with the dice.
However on this occasion it is a class method so unsure how to settle using self in class method.
The errror I get is cannot find the lengthof 'Hand', which I assume is refering to the Hand in Hand(list)
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): @property def total(self): return sum(self) @classmethod def roll(cls, size): super().__init__() for _ in range(size): cls.append(D20())
Steven Parker201,997 Points
Here's a few hints:
- you won't need to call "super" for anything
- the "cls" parameter refers to the class itself and has no "append" method
- but you can use "cls" to create a new instance, which does have "append"
- the method needs to eventually "return" the new instance