Emulating Final classes in Python

alister alister.ware at ntlworld.com
Wed Jan 18 08:43:10 EST 2017


On Wed, 18 Jan 2017 13:10:41 +1100, Steven D'Aprano wrote:

> On Tuesday 17 January 2017 20:37, Antoon Pardon wrote:
> 
>> Op 17-01-17 om 08:05 schreef Steven D'Aprano:
>>> I wish to emulate a "final" class using Python, similar to bool:
>>>
>>> py> class MyBool(bool):
>>> ...     pass ...
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>> TypeError: type 'bool' is not an acceptable base type
> [...]
>> I find those kind of classes annoying as hell and nobody has ever given
>> me a good reason for them. What good was it to change Lock from a
>> factory function to a class if you can't subclass the result anyway.
> 
> I'm not sure which Lock class you're referring to.
> 
> 
>> The result will probably be that users that would prefer to subclass
>> your class will monkey-patch it. Something like:
>> 
>> class MyLock:
>>     def __init__(self):
>>         self.lock = Lock()
>> 
>>     def __getattr__(self, attr):
>>         return getattr(self.lock, attr)
> 
> That technique is called "delegation", or sometimes "composition".
> 
> 
>> So I wonder what reasons do you have prefering that your users
>> monkey-patch your class instead of subclassing it?
> 
> Since my class provides no useful behaviour, I don't think anyone will
> seriously have any reason to subclass it.

if it provides "No Usefull behaviour" why does it even exist
what useless behaviour does it provide? :-)

(no mater how pointless there is always someone how will find a use, I 
even know someone who successfully sold a box of paper shredding on ebay!)

> 
> Python has at least three singleton instances which are used purely as
> abstract symbols: they have no state, and very little behaviour besides
> a nice repr. They are None, NotImplemented and Ellipsis. I'm effectively
> trying to make my own abstract symbol.
> 
> But it's mostly a learning exercise.





-- 
Good programmers treat Microsoft products as damage and route
around them.

   -- From a Slashdot.org post


More information about the Python-list mailing list