当前位置: 首页 > 科技观察

Python中的下划线和魔方法

时间:2023-03-17 22:46:48 科技观察

下划线在Python中具有非常特殊的含义。开门见山Underscore在Python中有着特殊的含义。简单来说,可以概括为三点。单下划线一般用于声明私有成员,如_private_var单下划线一般用于命名已被保留关键字占用的变量,如class_、type_双下划线一般用于Python内置的特殊方法或属性,如as__name__,__file__,有时称为魔方方法。有关更详细的讨论,请参阅StackOverflow上的此线程:对象名称前的单下划线和双下划线的含义是什么?[1]。__foo__:这只是一个约定,Python系统使用不会与用户名冲突的名称的一种方式。_foo:这只是一个约定,程序员用来表明变量是私有的(不管在Python中是什么意思)不会与另一个类中的相似名称重叠。在Python世界中,其他形式的下划线都没有意义。在这些约定中,类、变量、全局等之间没有区别。有时我们可以看到一个变量名只是一个下划线。在这种情况下,变量一般是不重要的或者只是一个临时工,连名字都不匹配都有。for_,valueinfunc():#如果func每次都返回两个值,我们只关心第二个值use(value)思维导图下面是思维导图的总结如何调用magicmethods对应的,本例中它很明显如何称呼他们。这里有一个附录,可以作为调用魔术方法的参考。当魔术方法被调用时解释__new__(cls[,...])instance=MyClass(arg1,arg2)__new__在实例创建时被调用__init__(self[,...])instance=MyClass(arg1,arg2)__init__在实例创建时调用__cmp__(self)、self==other、self>other等调用__pos__(self)自一元加法符号__neg__(self)-自一元减法符号__invert__(self)~self按位逆__index__(self)x[self]__nonzero__(self)bool(self)对象用于索引时对象的布尔值__getattr__(self,name)self.name#name不存在访问不存在的属性__setattr__(self,name)self.name=val分配属性__delattr__(self,name)delself.name删除属性__getattribute__(self,name)self.name访问任何属性__getitem__(self,key)self[key]使用索引访问元素__setitem__(self,key)self[key]=val使用索引为元素赋值__delitem__(self,key)delself[key]使用索引删除对象__iter__(self)forxinselfiteration__contains__(self,value)self中的值,不在self中的值membertestingwithin__call__(self[,...])self(args)“调用”一个实例__enter__(self)withselfasx:with声明的上下文管理器__exit__(self,exc,val,trace)withselfasx:withdeclaredcontextmanager__getstate__(self)pickle.dump(pkl_file,self)Pickling__setstate__(self)data=pickle.load(pkl_file)Pickling如果你还想了解魔方方法的更多细节,那你一定不能错过:魔术方法指南[2]魔术方法指南[3]参考资料[1]对象名前的单下划线和双下划线是什么意思?:http://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore-before-an-object-name-in-python[2]魔术方法指南:http://pyzh.readthedocs。io/en/latest/python-magic-methods-guide.html[3]魔法方法指南:http://www.rafekettler.com/magicmethods.html