Home  >  Article  >  Backend Development  >  python study notes - magic method to make custom classes more like built-in types

python study notes - magic method to make custom classes more like built-in types

高洛峰
高洛峰Original
2017-02-18 10:46:021149browse

Python’s magic methods are those predefined functions in Python like __XXX__.
The biggest advantage of using Python's magic methods is that python provides simple methods to allow objects to behave like built-in types.

__str__ function

__str__The function is used to process the output content when printing the instance itself. If this function is not overridden, an object name and memory address are output by default.
For example:

>>> class Student(object):
...     def __init__(self,name):
...             self._name = name
...
>>> print Student()

Output: <__main__.Student object at 0x0000000002A929E8>.
So how do we make the output results more readable? We can override the __str__ function. For example, the output result of

>>> class Student(object):
...     def __init__(self, name):
...             self._name = name
...     def __str__(self):
...             return  "I'm a student, named %s" % self._name
...
>>> print Student("Charlie")

is: I'm a student, named Charlie.
When we apply the str() function to the object, in fact It is the __str__ function that calls the object.

_repr_ Function

__repr__ also serializes objects, but __repr__ is more for the python compiler watch. __str__It’s more about readability.
When we use the repr() function to touch an object, what we call is actually the __repr__ function of the function.

Paired with repr() is the eval() function. eval()The function is to convert the serialized object back into an object. The premise is that the object implements the __repr__ function.

The above paragraph is based on my own understanding, I don’t know whether it is right or wrong.

>>> item = [1,2,3]
>>> repr(item)
'[1, 2, 3]'
>>> other_item = eval(repr(item))
>>> other_item[1]
2

__iter__ function

We often use for...in... to iterate on lists or tuples. That is list inherits from Iterable. Iterable implements the __iter__ function.

If you want to turn a custom object into an iterable object, you must implement two methods: __iter__ and next.

__iter__The function returns an object. When iterating, the next function will be continuously called to get the next value until StopIteration is captured.
Teacher Liao Xuefeng’s tutorial writes the __next__ method, I don’t know why.

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 10000:
            raise StopIteration
        return self.a


for i in Fib():
    print i

__getitem__ function

The above implements the iteration of objects by implementing the __iter__ function.
So how to implement the object to extract elements by subscript.
This is achieved by implementing the __getitem__ method of the object.
Let’s give one

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn