Op Tuesday 28 Apr 2015 10:37 CEST schreef Steven D'Aprano: > On Tuesday 28 April 2015 17:33, Cecil Westerhof wrote: > >> If I remember correctly you can not hide variables of a class or >> make them read-only? > > In Python circles, the preferred terminology for class and instance > members is "attributes" rather than variables. "Variable" is > reserved for module- and function-level name bindings.
I will try to remember that. > But other than that, you are correct. Python practices attribute > hiding by convention. Names beginning with a single underscore like > _spam or obj._eggs are treated as private. Using that now. > Names beginning with two underscores, but not trailing with > underscores, are also name-mangled: obj.__eggs will be mangled to > obj._TheClass__eggs. You should avoid name-mangling unless you > really need it, don't use it "just in case". What is a good reason? > The convention is, if the caller messes with your private attributes > or variables, and their code breaks, they have nobody to blame but > themselves, and we are allowed to laugh at them. We're consenting > adults here. Coming from C/C++ and Java I have to get used to it, but I will manage I think. > Don't use a class at all. Moving average is best handled as a > generator. We can use a regular generator: Not in this case. The idea is that you do not know the elements at the moment, but feed them to the MovingAverage instance as they come in. See: https://github.com/CecilWesterhof/PythonLibrary/blob/master/utilDecebal.py > If you must use a class, flag the internal attributes as private > with a leading underscore. Your callers will respect that, and if > they don't, all promises are null and void. Done. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof -- https://mail.python.org/mailman/listinfo/python-list