Trong Python, những gì bắt đầu và kết thúc bởi 2 dấu gạch dưới đều được coi là đặc biệt. Có thể xem qua các methods, attributes, ... này bằng lệnh:
Code:
$ grep -oh '__[A-Za-z][A-Za-z]*__' /usr/lib/python2.7/*.py | sort | uniq
__init__ là một special method. Nó được gọi tự động khi bạn tạo một instance mới của một class.
Ví dụ:
giả sử bạn có một class Student với các attributes như: name, age, ...
Code:
>>> class Student:
... def __init__(self, n, a):
... self.name = n
... self.age = a
khi bạn tạo một instance mới của class này:
Code:
>>> s = Student("ovaner", 18)
thì __init__ sẽ được tự động gọi, các attributes name, age sẽ được "gắn" vào object s:
Code:
>>> s.name
'ovaner'
>>> s.age
18
__doc__ là một special attribute. Đơn giản nó là một string miêu tả về object (module, class, method, function) thôi.
Quay trở lại ví dụ trên, nếu bạn viết thêm docstring cho Student class và __init__ method:
Code:
>>> class Student:
... """Student class"""
... def __init__(self, n, a):
... """init special method"""
... self.name = n
... self.age = a
thì khi gọi `s.__doc__` hoặc `s.__init__.__doc__` bạn sẽ có:
Code:
>>> s = Student("ovaner", 18)
>>> s.__doc__
'Student class'
>>> s.__init__.__doc__
'init special method'