newb question about @property
Steve D'Aprano
steve+python at pearwood.info
Wed Oct 4 22:12:08 EDT 2017
On Thu, 5 Oct 2017 09:08 am, bartc wrote:
[...]
> And when I tried, it didn't really work in Python 2 (extra attributes
> could still be created, and .__slots__ wasn't readonly); only Py3.
Not quite, but I don't blame you for the mistake. Its an easy one to make.
__slots__ only works in "new style classes", not "classic classes" in Python
2. And yes, it is a wart in Python 2 that there are two subtly different
kinds of class. This is due to historical reasons, and its fixed in Python 3.
In Python 2, "classic classes" are declared like this:
class MyClass:
...
(or by inheriting from another classic class).
New-style classes, or "types", inherit from object:
class MyClass(object):
...
(or some other new-style type, like int, dict, list, etc.)
Yes yes yes, I completely agree that this is a suboptimal situation. It is a
language wart and a trap for the beginner, or even the experienced coder. Use
Python 3, where it is fixed.
--
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.
More information about the Python-list
mailing list