class A(random.choice([B, C]):
... class A(random.choice([B, C]):
... class Rectangle:
var w,h
class Square(Rectangle if w == h):
...
You could then overload functions/methods on both `Square` and `Rectangle` and it would call the correct overload depending on the runtime values of `w` and `h`.