2012-04-02 2 views
4

За исключением файлов __init__.py, имеют ли главные и конечные двойные символы подчеркивания какое-либо значение в имени файла? Например, __model__.py каким-либо образом более значительным, чем model.py?Значение двойных символов подчеркивания в имени файла Python

+1

возможно дубликат [Смысл одно- и двойного подчеркивания перед именем объекта в Python] (http://stackoverflow.com/questions/1301346/the-meaning-of- a-single-and-a-double-underscore-before-an-object-name-in-python) –

+5

Не дубликат, потому что этот вопрос относится к фактическому имени файла, а не к именам в файле. – Matty

+1

Возможный дубликат [Что такое '__init__'.py for?] (Http://stackoverflow.com/q/448271/1079354) – Makoto

ответ

7

Двойные подчеркивания в именах файлов, отличных от __init__.py и __main__.py, не имеют никакого значения для самого Python, но рамки могут использовать их для указания/идентификации различных вещей.

0

Ahhh! Я вижу, вы обнаружили магические методы.

Двойные подчеркивания называются «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] 

Пожар на Idle в питоне, и попробовать это. Удачи вам в практике Voodoo Python!

EDITED

К сожалению, я очень быстро прочитал ваш вопрос, позвольте мне говорить об этом, потому что я, возможно, не покрыли его в своем ответе: Если имя файла __init__.py, он делает нечто подобное, что я упоминание перед тем. Он вызывает инициализацию, и python будет делать это, как только папка будет достигнута для использования модуля. То есть, если вы читаете этот файл, потому что он был вызван, например, ссылаясь на папку модулей, и в этом случае вам нужен файл __init__.py, чтобы он мог распознать его внутри папки. Вы можете использовать любой из магических методов в качестве имен, чтобы получить аналогичную функциональность при использовании.

Надеюсь, что разъяснение было полезным.

Джозеф
+1

Он не спрашивал о специальных методах, он спрашивал конкретно о двойных подчеркиваниях в именах файлов. – DSM

+0

Это было о * именах файлов * не имена в файлах! :-p Спасибо за эту ссылку, хотя это похоже на хорошее чтение. – Matty

+0

Извините, я взорвался.Я сделал быстрое редактирование, надеюсь, что эти ссылки полезны для вас! –

Смежные вопросы