1. 理论
- Python中不存在真正的私有方法。为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不属于API。但是,这只是一个形式上的约定,python并不阻止调用。
- 双下划线的作用是避免覆盖其内容,实现的机制是在带有双下划线的方法或属性前加上类名的标识。由于,python自动对方法和属性进行了改写,所以直接调用带有双下划线的方法是调用不到的。
- “xx”经常是操作符或本地函数调用的magic methods。在上面的例子中,提供了一种重写类的操作符的功能。它是用于Python调用的。
有人说:初学 len() 的时候始终不明白为什么要定义__len__(),甚至觉得类中有没有__len__()都无所谓,有的时候len()仍然能正常执行。但是经过几次尝试终于明白有的时候为什么要定义__len__()。首先__len__()的作用是返回容器中元素的个数,要想使len()函数成功执行,必须要在类中定义__len__()。而len()的执行指的是在命令窗口输入len(),而在程序中一般情况下即使不定义__len__()程序中的len()函数也能成功执行。个人认为其实二者并没有多大差别,主要还是看在命令窗口的行为,你是输入的是len(对象)还是len(对象.属性)。
以上程序的类中定义了__l