Pytho中下划线_、__的区别、常见魔法函数详解

单下划线 _method_name

Python中没有真正的private方法,规定类中_开头的为私有属性或方法,则外部不应该调用:

Class A():
	def __init__(self):
		self._x = 1
	
a = A()
print(self._x)

上方代码输出为 1
这个属性/方法是能被调用的,但出于某种约定,我们是一般不去调用的。

双下划线 __method_name

__开头的为私有属性/方法,只能self访问,且__开头的不能被子类重写:

Class A():
	def __init__(self):
		self.__x = 1
	
a = A()
print(self.__x)

上方代码输出为 ‘A’ object has no attribute ‘__x’

前后双下划线 method_name

为Python的魔法函数,一般是系统定义名字,类似于__init__(),一般是给Python调用的。
常见魔法函数:

  1. 字符串表示: __str__ __repr__

    • __str__(): 返回打印该对象时的结果字符串
  2. 迭代相关: __iter__ __next__

    • __iter__(): 返回一个迭代器,一个类只要实现了__iter__方法,就是可迭代对象,for循环自动调用__iter__来获取一个迭代器
    • __next__(): 自定义一个类,只要实现了__next__方法,就是迭代器
  3. 可调用: __call__

  4. 集合、序列相关: __len__ __getitem__ __setitem__ __delitem__ __contains__

  5. 属性相关:__getattr____setattr____getattribute__

  6. with上下文管理器:__enter____exit__

你可能感兴趣的:(Python编程,python,开发语言)