2013-12-03 10 views
7

фон: Для тех, кто не знаком с ним, Sublime Text (и TextMate) обеспечивает подсветку синтаксиса и другие функции с помощью областей, которые определяются файлы определений .tmLanguage языка, в основном кучу регулярные выражения для идентификации различных конструкций в данном языке, такие как определения функций, различные типы строк, зарезервированные слова и т.д.Встроенные магические имена переменных/атрибутов

Я хранитель Python Improved пакета (доступен через Package Control если вы заинтересованы), что цели для лучшего определения языка для Python. Вы можете прочитать об этом в GitHub, если хотите, но одна из ключевых особенностей заключается в том, что он фактически поддерживается, в отличие от многих из Sublime-языков, которые не были изменены или обновлены годами.

Вопрос: Я сосредотачивался в последнее время на двойных подчеркнуло __magic__ вещей, и после нахождения this excellent treatise по Рейфу Kettler на магических функциях, я был в состоянии расширить эту часть определения языка совсем немного. Тем не менее, мне было немного меньше удачи в поиске хорошего списка встроенных имен магических переменных или магических атрибутов, таких как __class__ или __doc__. Я прошел через раздел документов Data Model, но он оставляет желать лучшего в моих целях и, похоже, сосредоточен главным образом на именах магических методов.

Так что мой вопрос: что должно быть включено в область support.variable.magic.python? Это его определение до сих пор:

\b__(all|bases|class|debug|dict|doc|file|members|metaclass|methods|module|name|slots|weakref)__\b 

Одна из причин, почему я начал этот проект, чтобы научить себя больше о Python, и я определенно был успех до сих пор, но я вроде застрял в этой точке ,

Для того, чтобы быть ясным, я не ищу любимый ресурс вне сайта (хотя, если у вас есть удобная ссылка, я был бы признателен), и я не пытаюсь начать утомленное обсуждение. Все, что я пытаюсь понять, это если этот список выглядит разумным как есть, или если есть какие-то вопиющие ошибки. Если вы do хотите быть самоуверенным, open an issue, и я был бы более чем счастлив обсудить.

Спасибо!

+0

Что относительно операторов? '__eq __, __ lt __ и т. д. общие сравнения' __cmp__', '__str__' среди других ... –

+0

@JoranBeasley они определены в' support.function.magic.python' - все от этих до '__delete__' до' __missing__' до '__setstate__' - это довольно длинный список. – MattDMo

+0

Возможно https://docs.python.org/3/library/inspect.html#types-and-members помогает немного – Claude

ответ

6

Увы, документ модели данных - это самая полная вещь, о которой я могу думать, и она даже не разработана как индекс. Я не совсем понимаю, что вы ищете; __all__ - это модуль глобальный, __slots__ - это атрибут класса, __weakref__ отображается только как строка внутри списка слотов, а __module__ - это атрибут функции и др. Я предполагаю, что какой-то специальный атрибут, который обычно не называется вызываемым?

Конечно, вы всегда можете спросить Python.

>>> dir(type) 
['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__weakrefoffset__', 'mro'] 
>>> import sys 
>>> dir(type(sys)) 
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 

На первый взгляд, вы определенно не хватает __mro__ и __subclasses__. Усложнение этого заключается в том, что существуют некоторые специальные методы, используемые только кодом, который встроен в Python, а не основным языком: примеры включают __format__ (используется str.format) и различные методы ABC.

Я даже не знаю, что __weakrefoffset__is.

Обратите внимание, что Python 3 имеет несколько новых вещей: есть метод __prepare__ используется метакласса интригах, функции и методы теперь используют магические имена для своих атрибутов, а не шум, как im_self (см «Пользовательские функции» раздел Data Model), и есть __qualname__ как для модулей, так и для классов.

Кроме того, importing PEP упоминает именно то, что модуль Загрузчик должен делать, в том числе установить некоторые атрибуты магии: __name__, __file__, __path__, __loader__ и __package__.

+0

Проблема в том, что я не совсем понимаю, что должно быть там - список из TextMate из-за Sublime Text, и единственным комментарием является «волшебные переменные, которые могут иметь класс/модуль». Думаю, когда я начал, я думал, что будет ясный список магических функций и еще один четкий список магических атрибутов, но он не выглядит таким четким. – MattDMo

7
import gc 

print("\n".join(sorted({attrname for item in gc.get_objects() for attrname in dir(item) if attrname.startswith("__")}))) 
#>>> __about__ 
#>>> __abs__ 
#>>> __abstractmethods__ 
#>>> __add__ 
#>>> __all__ 
#>>> __and__ 
#>>> __annotations__ 
#>>> __author__ 
#>>> __base__ 
#>>> __bases__ 
#>>> __basicsize__ 
#>>> __bool__ 
#>>> __build_class__ 
#>>> __builtins__ 
#>>> __cached__ 
#>>> __call__ 
#>>> __cause__ 
#>>> __ceil__ 
#>>> __class__ 
#>>> __closure__ 
#>>> __code__ 
#>>> __complex__ 
#>>> __concat__ 
#>>> __contains__ 
#>>> __context__ 
#>>> __copy__ 
#>>> __copyright__ 
#>>> __credits__ 
#>>> __date__ 
#>>> __debug__ 
#>>> __deepcopy__ 
#>>> __defaults__ 
#>>> __del__ 
#>>> __delattr__ 
#>>> __delete__ 
#>>> __delitem__ 
#>>> __dict__ 
#>>> __dictoffset__ 
#>>> __dir__ 
#>>> __displayhook__ 
#>>> __divmod__ 
#>>> __doc__ 
#>>> __enter__ 
#>>> __eq__ 
#>>> __excepthook__ 
#>>> __exit__ 
#>>> __file__ 
#>>> __flags__ 
#>>> __float__ 
#>>> __floor__ 
#>>> __floordiv__ 
#>>> __format__ 
#>>> __func__ 
#>>> __ge__ 
#>>> __get__ 
#>>> __getattr__ 
#>>> __getattribute__ 
#>>> __getitem__ 
#>>> __getnewargs__ 
#>>> __getstate__ 
#>>> __globals__ 
#>>> __gt__ 
#>>> __hash__ 
#>>> __iadd__ 
#>>> __iand__ 
#>>> __iconcat__ 
#>>> __ifloordiv__ 
#>>> __ilshift__ 
#>>> __imod__ 
#>>> __import__ 
#>>> __imul__ 
#>>> __index__ 
#>>> __init__ 
#>>> __initializing__ 
#>>> __instancecheck__ 
#>>> __int__ 
#>>> __inv__ 
#>>> __invert__ 
#>>> __ior__ 
#>>> __ipow__ 
#>>> __irshift__ 
#>>> __isabstractmethod__ 
#>>> __isub__ 
#>>> __itemsize__ 
#>>> __iter__ 
#>>> __itruediv__ 
#>>> __ixor__ 
#>>> __kwdefaults__ 
#>>> __le__ 
#>>> __len__ 
#>>> __loader__ 
#>>> __lshift__ 
#>>> __lt__ 
#>>> __missing__ 
#>>> __mod__ 
#>>> __module__ 
#>>> __mro__ 
#>>> __mul__ 
#>>> __name__ 
#>>> __ne__ 
#>>> __neg__ 
#>>> __new__ 
#>>> __newobj__ 
#>>> __next__ 
#>>> __not__ 
#>>> __objclass__ 
#>>> __or__ 
#>>> __package__ 
#>>> __path__ 
#>>> __pos__ 
#>>> __pow__ 
#>>> __prepare__ 
#>>> __qualname__ 
#>>> __radd__ 
#>>> __rand__ 
#>>> __rdivmod__ 
#>>> __reduce__ 
#>>> __reduce_ex__ 
#>>> __repr__ 
#>>> __reversed__ 
#>>> __rfloordiv__ 
#>>> __rlshift__ 
#>>> __rmod__ 
#>>> __rmul__ 
#>>> __ror__ 
#>>> __round__ 
#>>> __rpow__ 
#>>> __rrshift__ 
#>>> __rshift__ 
#>>> __rsub__ 
#>>> __rtruediv__ 
#>>> __rxor__ 
#>>> __self__ 
#>>> __set__ 
#>>> __setattr__ 
#>>> __setitem__ 
#>>> __setstate__ 
#>>> __sizeof__ 
#>>> __slots__ 
#>>> __stderr__ 
#>>> __stdin__ 
#>>> __stdout__ 
#>>> __str__ 
#>>> __sub__ 
#>>> __subclasscheck__ 
#>>> __subclasses__ 
#>>> __subclasshook__ 
#>>> __suppress_context__ 
#>>> __traceback__ 
#>>> __truediv__ 
#>>> __trunc__ 
#>>> __version__ 
#>>> __weakref__ 
#>>> __weakrefoffset__ 
#>>> __wrapped__ 
#>>> __xor__ 
+0

Не могли бы вы немного рассказать об этом? Многие из этих элементов уже находятся в категории «магические функции», но не все, больше в списке, который я разместил в вопросе, но не во всех. Дополнительные, такие как '__credits__', определены в некоторых классах/модулях, но не являются встроенными. – MattDMo

+0

Честно говоря, я просто пытался облегчить жизнь, предоставив вам полный список имен дунгов. Не стесняйтесь использовать его или игнорировать. – Veedrac

+0

Не поймите меня неправильно, я определенно ценю это :) Я просто задавался вопросом, есть ли способ их сортировки или сортировки. Я просто использую свой google-fu, чтобы понять, что они означают, а затем помещают в соответствующую категорию. – MattDMo

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