conceptual problem (was: A beginning beginner's question about input, output and . . .
Cameron Simpson
cs at cskk.id.au
Wed Jan 13 17:49:40 EST 2021
On 13Jan2021 10:37, songbird <songbird at anthive.com> wrote:
> my momentary conceptual problem is that to me OOP means
>being able to encapsulate data structures and code from
>other parts of the program, but to me it doesn't look like
>that is how python is designed. this is probably a complete
>aside to this whole thread and perhaps even this newsgroup
>so i'll subthread this.
Python allows you to avoid mucking with the object internals from
outside. But it doesn't prevent it.
So you can (and often should) adopt an OOP approach - it reduces the
dependencies between your classes, with the benefits that brings.
The "pure" OOP approach, where method calls are used as messages to set
or fetch aspects of the object, is usually does with getter and setter
methods like:
x = o.getX()
o.setX(9)
In Python this is less common. Simple things like that which do not
intrude much on the conceptual model (i.e. if all such things will have
an "X") are usually exposed as a public attribute which you can get or
set directly:
x = o.x
o.x = 9
"Public" attributes in Python are just a convention: we name "private"
attributes with a leading underscore and "public" attributes with
leading letters and expect people using our classes to behave well.
Sometime we _don't_ have a plain old attribute "x", but we do have a
property of the object looking like it. Then you can implement something
which looks like an attribute from outside:
@property
def x(self):
# "x" if a derived value
return self._a + self._b
@x.setter
def x(self, new_x):
# setting "x" gets split between _a and _b
x2 = x / 3
self._a = x2 # put some in _a
self._b = x - x2 # put the rest in _b
# you can still do this, but it calls methods now
x = o.x
o.x = 9
So Python supports OOP practices but doesn't enforce them. Adopt the
degree of discipline you think best.
Cheers,
Cameron Simpson <cs at cskk.id.au>
More information about the Python-list
mailing list