Re:Anti-Patterns in Python Programming
by manish_gill on Wednesday July 09, 2014 @03:03PM
(#8011584)
Ah, gotcha!
It's been a while since I've done major OOP coding in any language other than Python, so I'm a little rusty. The issues you raise are perfectly legitimate and would be understandably confusing to newcomers to the language. :)
In most of the languages I'm familiar with, there are very clear syntax differences when working with class attributes. For example, in many languages class attributes have to be accessed via the class name instead of from an instance of the class making it clear to the programmer they are working with a class attribute, e.g. MyClass.myClassVariable not myInstance.myClassVariable. Additionally, the way you define class attributes in python is the way you define instance attributes in many languages, which just adds to the confusion. e.g. in Java or C# you can define class variables directly in the class body, but an explicit 'static' keyword is needed, undecorated definitions are assumed to be instance variables.
Finally, I think the definition of class B above is a little more nuanced, class B has both a class attribute named l AND an instance attribute named l.
B.l == None and B().l == []