order = Order() order.quantity = 10 # Works
def my_meta(name, bases, dct): dct['version'] = 1.0 return type(name, bases, dct) class MyClass(metaclass=my_meta): pass python 3 deep dive part 4 oop high quality
class PositiveNumber: def __set_name__(self, owner, name): self.name = name def __get__(self, instance, owner): if instance is None: return self return instance.__dict__.get(self.name) order = Order() order
: Always use super() in inheritance hierarchies, even for single inheritance. It’s future-proof. 7. Method Resolution Order (MRO) – C3 Linearization Python computes MRO using the C3 linearization algorithm (no diamond problem). You can inspect MRO: Method Resolution Order (MRO) – C3 Linearization Python
ABCs are essential for large systems to enforce Liskov substitution. Descriptors are the mechanism behind @property , @classmethod , and @staticmethod . A descriptor is any class implementing __get__ , __set__ , or __delete__ .
class A: def show(self): print("A") class B(A): def show(self): print("B") super().show() # Works, but rigid :