Форум сайта python.su
doza_andту дело даже не в требовании TUserList от TUser а глевное чтоб при использовании класса, в TUserList не попал никто другой кроме TUser. Потому что если попадёи, то выяснится это может очень и очень не скоро. А так выяснится при попадании.
Александр Кошелевв подобный контейнер можно запихнуть всё что угодно, и он слова не скажет. А выяснится что там лежит что-то не то может уже очень и очень позно, а может и вообще не выяснится. Это затрудняет краш тесты и дебаг.class Userlist(object):
def __init__(self):
self.list_=[]
def add(self, user):
self.list_.add(user)
Офлайн
doza_andЭто очень интересно, спасибо за информацию, изучаю. К сожалению изза специфики задачи, реализую свой контейнер обьектов, может перепишу ввиду недавнего узнавания про property в питоне. http://python.su/forum/viewtopic.php?id=12246
http://hlabs.spb.ru/development/zope/in … ption.html
Офлайн
Alex_KutsanТак я про это и написал. Надо дать определение кто такой User. Допустим, что вы копите User чтобы принимать от них заказы на поставку яблок. У них тогда есть перечень заказов (количество и дата поставки) и расчетный счет. Очевидно также есть фамилия и адрес. Вы поставляете им яблоки и на новый год шлете рождественские открытки. Пока все ок?
не в требовании TUserList от TUser а глевное чтоб при использовании класса, в TUserList не попал никто другой кроме TUser.
Офлайн
Alex_KutsanЕсли второй вариант случится, то это вообще тогда не проблема и вы делаете лишнюю работу, проверяя тип.
в подобный контейнер можно запихнуть всё что угодно, и он слова не скажет. А выяснится что там лежит что-то не то может уже очень и очень позно, а может и вообще не выяснится.
Офлайн
Александр КошелевНу почему. Если все разработчики договорятся что они не будут удалять поля и методы из объектов, то тогда это будет достаточно быстрый способ проверки интерфейса (Для больших коллективов это конечно труднодостижимо). Для полноты надо конечно сравнить сколько весит isinstance по сравнению с hasattr. Вы не знаете сколько?
это просто глупо
Отредактировано (Авг. 6, 2011 13:06:10)
Офлайн
doza_andВ том и дело, что это не проверка интерфейса, а строгая проверка типа. Я могу иметь класс с таким же интерфейсом, но в параллельной иерархии.
Ну почему. Если все разработчики договорятся что они не будут удалять поля и методы из объектов, то тогда это будет достаточно быстрый способ проверки интерфейса
doza_andТак же для коллектива можно договориться использовать функционал по назначению, а не пробовать его “на зуб”, бездумно кладя в контейнер то чего в нем не должно быть.
Для больших коллективов это конечно труднодостижимо
doza_andЭто последнее о чем нужно думать.
Для полноты надо конечно сравнить сколько весит isinstance по сравнению с hasattr
Офлайн