On 01/06/2015 06:31 PM, Chris Angelico wrote:

The type check issue is mostly about compatability in the first place ; eg:
users typecheck either unintentionally -- (novices syndrome) -- or because
they need all the capabilities of a given type, and the only simple way to
find out if they are all there are there is to typecheck.  eg: That's the
whole point of subclassing bool ... to let the user know they have at their
disposal (in a portable, simple way) all the features of the base type.
Thing is, you're not fulfilling bool's contract, so it's better to not
subclass, and just make your new type always falsy. If your users are
type-checking bools, you might just have to let it break, and tell
them not to do that.

ChrisA

Explain; How does mere subclassing of bool break the contract that bool has?
eg: What method or data would the superclass have that my subclass would not?

Are you speaking about the quasi singleton nature of bool ?
If so, I spent a little time browsing my design patterns book by Gamma, Helm, Johnson, and Vlissides; and I'm looking at the singleton pattern on p.127.

The author writes, "Use the singleton pattern when:
-- There must be exactly one instance of a class, and it must be accessible to clients from a well-known access point. -- When the _sole instance_ should be extensible by subclassing, and clients should be able to use an extended instance *without modifying their code*.
"

So, it's clear that in typical programming scenarios -- objects which are even more restrictive than bool by having only a single allowed instance rather than TWO -- are *Still* intentionally allowed to be subclassed for compatibility reasons.

And later in design patterns, the authors continue on:

"2. Subclassing the singleton class.
The _main issue is not so much defining the subclass_ but installing its unique instance so that clients will be able to use it."

So, the general programming community is aware of the issue Rossum brings up about a singleton's subclass having an instance; it's just apparent that there are ways to work around the issue and preserve a singleton's character while still allowing a subclass.

So: I'm really curious -- If subclassing is generally permitted for singletons as an industrial practice, why is it wrong to allow it in python?

I mean, If this is because Python doesn't support sub-classes for singletons, then it seems that Python is lacking something that should be added.

This isn't limited to bool, for as a library writer I might want to create a singleton class for my own purposes that has nothing to do with any of python's built in types. And so, it would be appropriate to have a mechanism for subclassing user created singletons as well....

I already KNOW that 'C++' does have a workaround mechanism, as I've mentioned in a different e-mail, so that there's no reason to instantiate an instance of the subclass of a singleton if you don't want to. That objection is really spurrious... so I really don't understand why Rossum cut off subclassability itself ... wasn't there any other way he could have prevented instantiation of subclasses without preventing the definition of a subclass itself?

I mean, even in python I can execute some methods of a class without actually INSTANTIATING that class.
eg:

import decimal
decimal.getcontext()

So, I don't understand your objection.
How does merely defining a subclass of bool violate the contract that bool puts out?

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to