Hung Vo wrote: > I'm new to Python and also wondering about OOP in Python. > > I want to justify the above question (is Python Object-Oriented?). > Does Python follow the concepts/practices of Encapsulation, > Polymorphism and Interface, which are quite familiar to Java > programmers?
I'd say that actually Python uses encapsulation extensively throughout the language. Every object in Python has attributes. Thus every object encapsulates (contains) attributes (which are themselves objects). I think the term "encapsulation" is often misinterpreted by some (Java programmers in particular) to mean some kind of enforced black-box methodology. In effect they feel that getters and setters is the definition of encapsulation. This is really not true, especially if you go back to the original OO languages, such as Smalltalk. So if you are asking, does python enforce some kind of bizarre black box access semantics (requiring getters and setters), the answer is an emphatic "no!" Interfaces have nothing to do with OO programming as a matter of a fundamental principle. Interfaces exist in Java to compensate for flaws/features in the language. Particularly the lack of multiple inheritance which is a blessing/curse in Java. Python just doesn't need interfaces. Protocols for communication with an object do not need to be formally enforced. For example the popular database API that most python database libraries use just makes sure it implements certain methods. Thus it doesn't matter if I'm using mysql, postgresql, or oracle. I still call the object's "connect" method. Such a breath of fresh air compared to Java, in my opinion. Such informality can be a bit of a hindrance to some I guess. After this entire thread, it's funny that people are still chiming in saying, "so is it really OOP" after having it explained in so many ways. -- http://mail.python.org/mailman/listinfo/python-list