Dynamic typing more dynamic than Python?
Wait, is that even possible?
Perl 5 already provides an incredibly dynamic approach to classes and objects: There are three main types of containers: scalars, arrays, and hash maps. Scalars hold a single thing, arrays hold a list of things indexed by position, and hash maps hold a list of things indexed by string. A thing can be a string, a number, or a reference to another container (among other things). Now Perl 5 has a feature called "blessing". Syntax: bless $refToContainer, "MyClass";. What this does is tell the container that it is now an object of the type MyClass, and that it should behave like MyClass says when it is treated like an object.
So when you write $refToContainer->foo(3), the MyClass namespace is searched for a function called foo, and if it's found, it's called with $refToContainer as its first argument and 3 as the second. If foo isn't found, then the super namespaces of MyClass are traversed recursively for foo (multiple inheritance and mixins are done simply by giving a namespace multiple super namespaces). If foo still isn't found, a special function called AUTOLOAD is called with the parameters $refToContainer, "foo" and 3, AUTOLOAD can be defined in MyClass or in its super classes, it's mainly used for autodelegation.
So basically, everything is duck typed, and objects are just of a certain type because they think they are. As you can see, this is already waaaay more dynamic than Python.
Perl 6 has an entirely different object system, a more sensible one with proper objects with attributes and methods and stuff, but it seems at least equally powerful. There's an important concept of roles, which are like interfaces but better, but I'm still reading through all those things. For example there's a built-in binary 'but' operator that allows you to do mixins per-object at runtime: If you say $thing = $car but $duck; then $thing is the same identical car as $car and $thing.drive() will have the same effect on $car as $car.drive(), but when you go $thing.speak() instead of $car.speak(), the car will go quack instead of honk.
And if it is, why would you want that?
I'm sure you can think of a lot of applications for only that 'but' operator. In any case, having an option is always better than having no option, because one day you'll be lazy enough to be glad you have that option. Also one of Perl's mottos is "There's more than one way to do it".