###### Tan Yang

13,163 Points# I changed another way for solving this, but it prompt Didn't get D20's...I also ran it in my Pycham, it works, but not h

my code in Pycham works, but here not!

logic is like this:

1, create classmethod, pass parameter "times" to it, and this method returns cls(times),
2, the result returned from classmethod cls(times), pass "times" to constructor **init**(self, times) to initiate an new instance of Hand class
3, using property to get sum of instance list:
lst = Hand.roll(2)
lst.total

```
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)
```

```
import dice
class Hand(list):
#when initiation self is always empty
def __init__(self, times):
#super().__init__()
for _ in range(times):
self.append(dice.D20().value)
@classmethod
def roll(cls, times = 0):
return cls(times)
@property
def total(self):
return sum(self)
```

## 1 Answer

###### Chris Freeman

Treehouse Moderator 54,942 PointsYou are very close! You're code would pass if you used `dice.D20()`

instead of `dice.D20().value`

.

Note this solution change fundamentally changes `Hand`

in that it is either empty or only contains instances of D20. While this works for the challenge, can you organize it so any dice time can be use? Hint: you do *not* have to create a `Hand.__init__`

method. It can be solved entirely within the `Hand.roll()`

method.

Post back if you need more help. Good luck!