Я узнаю о специальных методах в Python. Я понимаю синтаксис двойного подчеркивания для специальных методов - в соответствии с приведенным ниже примером.специальные методы - Python
Однако, когда вы читаете чужой код, как узнать, в общем, что, например, двойное подчеркнутое определение getitem
открывает функциональность индексации []
(например, гипотетическую функцию getitem()), и это, например, удвоенное подчеркнутое определение len
открывает способность len()
? Можно ли использовать, например, помочь функциям понять это?
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDeck:
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = 'spades diamonds clubs hearts'.split()
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits
for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, position):
return self._cards[position]
deck=FrenchDeck()
print(len(deck))
print(deck.__len__())
print(deck.__getitem__(4))
print(deck[4])
https://docs.python.org/2/reference/datamodel.html#object.__getitem__ –
Двойные подчеркивания не являются особым синтаксисом; они просто обычные имена. Они являются только специальными, потому что интерпретатор определен для использования указанных функций. Если вы определили свою собственную функцию, например, '__myfunction__', это не имело бы особого значения, чем если бы вы назвали ее« myfunction ». Единственное отличие состоит в том, что имена, начинающиеся и заканчивающиеся на '__', зарезервированы для интерпретатора; '__foo__' не имеет особого значения сейчас, но нет гарантии, что этого не произойдет в будущем. – chepner