On Sat, Feb 12, 2022 at 5:32 PM Steven D'Aprano <steve@pearwood.info> wrote:
> I have to say I agree with Neil here. I was trying to think about what
> other reasons an attribute might be unsettable, and did not quickly come up
> with that list.

I'm curious what list you came up with if it excluded the three cases I
suggested (no __dict__, __slots__, property). What other cases are
there?

You're giving me far too much credit -- I hadn't thought about it that much but "no __dict__" was all I cam up with quickly -- and I had no idea what other possibilities there were. (Once I was reminded of__slots__) 
 
> And after reading your list, I tried to imagine what I’d tell my beginning
> students !

Tell them in what context?

Have you already covered properties? If so, then it should be fairly
obvious what to tell them:

"Class, what do you think will happen if you have a property with no
setter and you try to set its value?"

That's the easy part -- we cover that when we cover properties -- this whole thing is not an issue when you are working with your own code that you just added a property to. This issue Neil brought up is that if teh cause is p the chain of superclasses somewhere, you don't get much help from the error message.

Telling newbies that that means that it's either a property with no setter, or am object without a __dict__, or one with  __slots__ defined is not really very helpful.

> But if the error message is indeed unique then yes:
>
>  "can't set property 'f'"
>
> Would be far more clear message.

As I said, I don't object to the change in wording if it is easy enough to implement.

I think we're all on the same page here.

-CHB

--
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython