About self, it's so strange to define a method with 2 arguments and call it with only one. Not only it's strange, it feels the opposite of being explicit. Most other languages manage to do without that self (Java, Ruby).
I run into another oddity today. Yesterday if forgot about
a = 0
if not a:
print("like in C")