On 25/04/19 3:52 AM, Alan Gauld via Tutor wrote:
On 24/04/2019 12:22, Arup Rakshit wrote:
In the simple code like what are the advantages we get from?
I'm not really sure what you are asking about?
Ok. My question is that when people add such a class to the module? What is the goal/intention they met by setting such __class__ attribute of a module. The documentation I am reading just shown this technique but didn't dig into this. They didn't explain why/when should we use this technique, but the how.

Is this so that we can implement more special methods
than just __getattr__ and __dir__ in the module level?
Is it just the inheritance from ModuleType?

Or is it the assignment of the __class__ attribute?
Yes the reason of this assignment.

Or something else?

import sys
from types import ModuleType

class VerboseModule(ModuleType):
     def __repr__(self):
         return f'Verbose {self.__name__}'
def __setattr__(self, attr, value):
         print(f'Setting {attr}...')
         super().__setattr__(attr, value)
sys.modules[__name__].__class__ = VerboseModule
There are many things in Python that are not generally used
by ordinary Python programmers. In many cases these are things
used by the core developers or are intended for advanced meta
programming type tasks. As a general rule of thumb any time
you see code that accesses dunder attributes (ie those with
leading and trailing __ markers) directly it's probably an
advanced technique you are unlikely to ever need...

That's a good catch. I am currently reading https://docs.python.org/3/reference/index.html source, and it seems like they touched everything possible in Python, without saying which is advance and which is basic part. Very often I get stuck, and coming here to ask and understand it. As the author didn't give the hints anything about what is advanced part, I am assuming these all a Python developer should know irrespective of their years of Python experience and keep readiing. But it feels like a lot in one go.



But if you want to increase your understanding carry on
asking but please be as specific as possible about what
it is you want the answer to.


--
Thanks,

Arup Rakshit

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to