首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-PyMongo:为什么是"self._Collection__database"?

Flask-PyMongo:为什么是"self._Collection__database"?
EN

Stack Overflow用户
提问于 2012-03-25 12:20:13
回答 1查看 182关注 0票数 2

在Flask-PyMongo中,它们使用self._Collection__database来表示此集合对象所属的数据库对象:

代码语言:javascript
复制
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.__database不是self._Collection__database

代码语言:javascript
复制
test <a>and <i>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-25 12:25:20

Flask-PyMongo并不是随意选择这个名字的。

该名称是name mangling的结果

由于类私有成员有一个有效的用例(即避免名称与子类定义的名称之间的名称冲突),因此对这种机制的支持有限,称为名称损坏。任何__spam形式的标识符(至少两个前导下划线,最多一个尾随下划线)都将以文本形式替换为_classname__spam,其中classname是去掉了前导下划线的当前类名。

the parent-class definition中,属性被定义为self.__database,Python将名称“损坏”(改为self._ClassName__attributename),这样任何子类都不会用自己对自己的self.__database属性的赋值来覆盖。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9857895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档