🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`__foo__`:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突,就是例如`__init__()`,`__del__()`,`__call__()`这些特殊方法 `_foo`:单下划线开头的表示的是** protected 类型的变量**,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *; `__foo`: 解析器用`_classname__foo`来代替这个名字,以区别和其他类相同的命名, 通过对象名.\_类名\_\_xxx这样的方式可以访问. 双下划线的表示的是**私有类型(private)的变量**, 只能是允许这个类本身进行访问了 ## `__new__`和`__init__`的区别 这个`__new__`确实很少见到,先做了解吧. 1. `__new__`是一个静态方法,而`__init__`是一个实例方法. 2. `__new__`方法会返回一个创建的实例,而`__init__`什么都不返回. 3. 只有在`__new__`返回一个cls的实例时后面的`__init__`才能被调用. 4. 当创建一个新实例时调用`__new__`,初始化一个实例时用`__init__`. [stackoverflow](http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init) ps:`__metaclass__`是创建类时起作用.所以我们可以分别使用`__metaclass__`,`__new__`和`__init__`来分别在类创建,实例创建和实例初始化的时候做一些小手脚.