Определение подписываемого класса в Python с использованием __getitem__ ⇐ Python

Программы на Python
Anonymous
Определение подписываемого класса в Python с использованием __getitem__

Сообщение Anonymous »

Я написал класс, но он не работает так, как хотелось:

Код: Выделить всё

class Varz:
_by_name = {}

@classmethod
def __getitem__(cls, name):
if name not in cls._by_name:
cls._by_name[name] = cls(name)
return cls._by_name[name]

def __init__(self, name):
self.name = name

print(Varz['foo'])
#=> TypeError: type 'Varz' is not subscriptable
Основываясь на этом ответе на этот вопрос, я заставил его работать, используя вместо этого __class_getitem__:

Код: Выделить всё

class Varz:
_by_name = {}

def __class_getitem__(cls, name):
if name not in cls._by_name:
cls._by_name[name] = cls(name)
return cls._by_name[name]
Зачем это нужно? Различные искусственные интеллекты изначально вели меня по неправильному пути и настаивали на том, что это должно было сработать. Это казалось верным, особенно если учесть, что мой первоначальный подход работал нормально, когда я использовал обычное имя метода на уровне класса:

Код: Выделить всё

    @classmethod
def find_or_create(cls, name):
...
Python 3.12.6


Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-getitem

Вернуться в «Python»