Python 皮蒙戈:“为什么?”;“自我收集”数据库;?

Python 皮蒙戈:“为什么?”;“自我收集”数据库;?,python,mongodb,flask,Python,Mongodb,Flask,在Flask PyMongo中,他们使用self.\u Collection\u database表示此集合对象所属的数据库对象: class Collection(collection.Collection): """Custom sub-class of :class:`pymongo.collection.Collection` which adds Flask-specific helper methods. """ def __getattr__(se

在Flask PyMongo中,他们使用
self.\u Collection\u database
表示此集合对象所属的数据库对象:

class Collection(collection.Collection):
    """Custom sub-class of :class:`pymongo.collection.Collection` which
    adds Flask-specific helper methods.
    """

    def __getattr__(self, name):
    attr = super(Collection, self).__getattr__(name)
    if isinstance(attr, collection.Collection):
        db = self._Collection__database
        return Collection(db, attr.name)
    return attr
为什么
self.\u集合\u数据库
不是
self.\u数据库

test <a>and <i>
测试和测试

皮蒙戈并不是随意选择这个名字。
该名称是以下各项的结果:

因为类私有成员有一个有效的用例(即 避免名称与子类定义的名称发生名称冲突) 对这种机制的支持是有限的,称为名称混乱。任何 垃圾邮件格式的标识符(至少两个前导下划线,至少 大多数尾随下划线)在文本上替换为
\u classname\uu spam
,其中classname是当前类名,去掉前导下划线

在中,属性被定义为
self.\uuuu数据库
,Python将名称(到
self.\uu类名\uuu属性名
)进行“篡改”,以便任何子类都不会用自己对自己的
self.\uuu数据库
属性的赋值进行覆盖