Itās recursively creating a list of lists containing all different possible combinations of the original list. Also not related to OOP, as it can be done with basic functions.

For better understanding add some print-statements to see the internal steps taken (this is not OOP but same functions):

```
def sub_sets(sset):
return subsetsRecur([], sorted(sset))
def subsetsRecur(current, sset):
print(current,"\t|", sset)
if sset:
return subsetsRecur(current, sset[1:]) + subsetsRecur(current + [sset[0]], sset[1:])
print("adding\t|", current)
return [current]
print("final results:", sub_sets([1,2,3]))
```

Will produce:

```
[] | [1, 2, 3]
[] | [2, 3]
[] | [3]
[] | []
adding | []
[3] | []
adding | [3]
[2] | [3]
[2] | []
adding | [2]
[2, 3] | []
adding | [2, 3]
[1] | [2, 3]
[1] | [3]
[1] | []
adding | [1]
[1, 3] | []
adding | [1, 3]
[1, 2] | [3]
[1, 2] | []
adding | [1, 2]
[1, 2, 3] | []
adding | [1, 2, 3]
final results: [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
```