Python, a fully dynamic language, will always have an advantage here in more static languages such as C # and Java. Java and C # also traditionally target more conservative markets, which makes them more conservative in design. Although C # gets more and more dynamically oriented functions with each new version.
Dynamic object attributes definition (using __getattr__, etc.)
This can be done in C # 4.0 using the new dynamic support. Using IDynamicObject in C #, you can implement "method_missing" (ala Ruby). However, this is really against the general intention and “feeling” of the language, and I have never seen it in practice (with the possible exception of the ASP.NET MVC ViewBag)
Operator overloading
C # has operator overloading. However, in my experience, it is almost never used.
Subclassing of built in types
Only if the type is not sealed. If it is sealed, extension methods often do the trick. Many / most of the built-in types in C # are sealed.
Mappings and sequence simulation using __getitem__, __setitem__, and __delitem__, etc., "magic" methods
An IEnumerable<T> implementation is probably the best choice in C #. This will allow your type to connect to LINQ and get all kinds of goodies for "free"
I have very little experience with Python, my "dynamic language of choice" was Ruby. I also worked professionally in C # since it debuted. C # really went a long way and turned into a pretty decent language. He really has a “kitchen sink” that can be intimidating at the beginning. But for the most part, it blends well. However, the fluidity, flexibility, power, and potential for abuses that Ruby is not present in C #. Hardcore ruby-ist (and presumably python-ist) will almost certainly find C # frustrating and limiting. C # is still a very "corporate" language and always will be.