On Sat, Jul 08, 2017 at 07:56:10PM -0600, Mats Wichmann wrote: > From OO people, though, we get the sputtering But... But... what about > encapsulation, data hiding, etc?
Regular attributes are still encapsulated. There's no difference in encapsulation between: obj.x # a standard attribute obj.x # a property obj.getx() # a Java-like getter Whichever way you choose, x is still attached to the instance. Data hiding is a good point, for those who care about data hiding. But Python has an answer to that too: we can hide data by prefixing the name with a single underscore. obj._x Or at least, hide it in plain sight. Python is for "consenting adults", and private attributes and variables are private by agreement, not because the language enforces the rule. (There are a few places in Python where the language does enforce data hiding, mostly to do with functions, and anything which could cause a segmentation fault. But regular Python code, not so much. The worst that happens is you get a regular Python exception.) Interesting that you refer to "OO people". There's no widespread agreement about what makes an Object Oriented Programming language (although Java people tend to think that Java offers the One True OOP language *wink*) but I think the most critical requirement is for the language to offer "objects" as a native data type, where objects are structured entities which combine: - behaviour (methods) - state (data, value) - and identity (unique existence). The first two make up encapsulation, or at least a form of encapsulation. Data hiding itself is not a requirement, and even inheritence isn't. (Although it is unusual to have OOP without a form of inheritence.) -- Steve _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor
