What are the differences amongst Python's "__get*__" and "_del*__" methods? What are the differences amongst Python's "__get*__" and "_del*__" methods? python python

What are the differences amongst Python's "__get*__" and "_del*__" methods?


The documentation for every method that you listed is easly reachable from the documentation index .

Anyway this may be a little extended reference:

__get__, __set__ and __del__ are descriptors

"In a nutshell, a descriptor is a way to customize what happens when you reference an attribute on a model." [official doc link]

They are well explained around, so here there are some references:

__getattr__, __getattribute__, __setattr__, __delattr__

Are methods that can be defined to customize the meaning of attribute access (use of, assignment to, or deletion of x.name) for class instances. [official doc link]

Example 1:

class Foo:    def __init__(self):        self.x = 10    def __getattr__(self, name):        return namef = Foo()f.x    # -> 10f.bar   # -> 'bar'

Example 2:

class Foo:    def __init__(self):        self.x = 10    def __getattr__(self,name):        return name    def __getattribute__(self, name):        if name == 'bar':            raise AttributeError        return 'getattribute'f = Foo()f.x    # -> 'getattribute'f.baz    # -> 'getattribute'f.bar    # -> 'bar'

__getitem__, __setitem__, __delitem__

Are methods that can be defined to implement container objects. [official doc link]

Example:

class MyColors:    def __init__(self):        self._colors = {'yellow': 1, 'red': 2, 'blue': 3}    def __getitem__(self, name):        return self._colors.get(name, 100)colors = MyColors()colors['yellow']   # -> 1colors['brown']    # -> 100

I hope this is enough to give you a general idea.