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