【问题标题】:Significance of double underscores in Python filenamePython 文件名中双下划线的意义
【发布时间】:2012-04-15 17:50:14
【问题描述】:

除了__init__.py 文件之外,文件名的开头和结尾双下划线是否有意义?例如,__model__.py 是否比model.py 更重要?

【问题讨论】:

标签: python


【解决方案1】:

__init__.py__main__.py 以外的文件名中的双下划线对 Python 本身没有意义,但框架可以使用它们来指示/识别各种事物。

【讨论】:

    【解决方案2】:

    啊!我知道你已经发现了神奇的方法。

    双下划线被称为“dunder”,它们调用可以对对象产生一些非常巧妙的效果的特殊方法。它们不会改变意义,但它们是非常了不起的巫毒教,是随身携带的好工具。

    这里有很多链接,我通过这里了解了所有关于魔法的方法。 http://pythonconquerstheuniverse.wordpress.com/2012/03/09/pythons-magic-methods/

    __init__ 是一种神奇的方法,用于声明在对象初始化时发生的事情。它前面只有__new__

    我一直使用的这些方法中最有用的是__dict__ 方法。 __dict__ 方法使得类中的所有属性都变成键值对,然后可以像字典一样使用。虽然我不认为将它用作文件名会有用。

    这是一个例子:

    class Thing(object):
        def __init__(self): ##Init here is a magic method that determines what haps first
            self.tint = "black"
            self.color = "red"
            self.taste = "tangy"
    
    thing = Thing()
    dictionary_from_class = {}
    for key in thing.__dict__.keys(): ##returns all key values. here: "tint, color, taste"
        dictionary_from_class[key] = thing.__dict__[key]
    

    在 python 中启动 Idle,然后尝试一下。祝你练习 python voodoo 好运!

    已编辑

    对不起,我真的很快就读到了你的问题,让我提一下,因为我可能没有在我的回答中涵盖它:如果文件名是 __init__.py,它的作用与我之前提到的类似。它调用初始化,一旦到达该文件夹以供模块使用,python 就会执行该操作。也就是说,如果您正在读取该文件,因为它被调用,例如引用一个模块文件夹,在这种情况下,您需要一个 __init__.py 文件才能让 python 在文件夹中识别它。您可以使用任何魔术方法作为名称,以便在使用时获得类似的功能。

    我希望澄清是有用的。

    -约瑟夫

    【讨论】:

    • 他不是在询问特殊方法,而是专门询问文件名中的双下划线。
    • 这是关于文件名而不是文件中的名称! :-p 不过感谢那个链接 - 看起来不错。
    • 对不起,我直接通过了。我做了一个快速编辑,希望这些链接对你有用!
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2013-10-13
    • 1970-01-01
    • 2012-11-09
    • 2012-05-28
    • 1970-01-01
    • 2016-12-03
    • 2017-09-25
    相关资源
    最近更新 更多