1: As you probably know, it is very bad practice to make object attributes public outside of the class. For this, you usually write getter and setter methods. Like this, you can make the attribute itself private and all read and write operations must use the public getter and setter methods. Properties are used to hide the fact that you can't access an attribute directly, mostly to make the code easier to read. So, the property takes your two defined methods, getAttr() and setAttr() and makes it so that you no longer have to type "object.setAttr(value)" but that "object.attr = value" is also valid. The difference is that "object.attr = value" now no longer accesses the attribute directly, but it is automatically redirected through the setter method.
2: In Python 2, each class had to derive from another class, no matter what. So, the most general class in Python is Object. This should no longer be necessary in Python 3.
3: Functions are usually defined with a set amount of parameters, for example def func(x, y). But what if you don't know how many arguments you'll get? A parameter with one asterisc in front of it is (for example *args) says that you don't know how many arguments you'll get. So, if the caller calls "func(1, 2, 3, 4, 5, 6, 7), args will now be a tuple with all given arguments and you can access it as usual with, for example, args. If you put two asteriscs in front of a parameter, you say that you don't know how many arguments you'll get and that those arguments will be given as keyword arguments. So now, the caller can call "func(a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7). This time, those arguments aren't saved in a tuple, but in a dictionary with their keywords as keys.
Hope that helps.
We are pleased, that you made it through the final challenge, where we pretended we were going to murder you. We are throwing a party in honor of your tremendous success. Place the device on the ground, then lay on your stomach with your arms at your sides. A party associate will arrive shortly to collect you for your party. Assume the party submission position or you will miss the party.