Почему возвращается None
? Потому что .remove, .add и т. Д. Возвращают None
:) Вот и все. Они не поддерживают цепочку.
set
использует методы, которые меняют его на месте. Вы можете создать свою собственную версию набора, который использует цепочку, но это может вызвать некоторые проблемы:
class chain_set(set):
def chain_add(self, x):
newself = self.copy()
newself.add(x)
return newself
cs = chain_set([1,2,3,4])
cs.chain_add(5)
# chain_set([1, 2, 3, 4, 5])
cs.chain_add(7)
# chain_set([1, 2, 3, 4, 7])
cs.chain_add(7).chain_add(8)
# chain_set([1, 2, 3, 4, 7, 8])
Проблема в том, ожидаете ли вы, что cs
изменится?
Вы всегда хотите изменить исходный набор (может создать некоторые трудно обнаруживаемые ошибки) или хотите копировать набор каждый раз (может быть медленнее с большими наборами). Если вы знаете, какое поведение вам нужно, и помните об этом, просто продолжайте реализацию собственного набора.