Самым эффективным способом считаю такой - "бей чем попадет и беги как можно быстрее". К баллончикам отношусь очень скептически, так как ими нужно уметь пользоваться и не всегда они уместны. Так в лифте, например, его вообще нет смысла доставать, так как достанется всем и, вполне возможно, тому, кто баллончик достал, может быть даже сильнее.
Травматическое оружие - вообще самый плохой вариант. Как минимум потому, что всем известно, кто оружие носит - тот чаще от него и страдает. К тому же им нужно уметь обращаться. Нужно адекватно понимать, когда оно уместно. И просто - не искушать судьбу.
Самая лучшая самооборона - навыки самообороны, отсутствие синдрома жертвы и банальная логика. Я даже не буду говорить - знание психологии и тому подобную чепуху, просто логика. Холодная и адекватная. Банально нужно понимать, что если на Вас напали, бояться этого человека или жалеть его не стоит: бей без предупредительного выстрела в воздух, без интеллигентного "извините, сейчас я вам сделаю ваву", без боязни, что сейчас у этого дяденьки/тетеньки из носика будет капать кровушка. Бей! По возможности с максимальным ущербом для нападающего (правда нужно постараться не убить, так что если в руке кирпич, то лучше бить не по темечку сверху вниз, а, например, в плече - перелом ключицы гарантирован, но никаких летальных исходов). И никогда не иди на добивание - если нападающий отступил, остановился, опустил голову - короче, сделал что угодно, из-за чего у вас появилась фора - разворачивайтесь и бегите.
Это самый лучший вариант обороны. Целее будете, чем с баллончиком, пистолетом, ножиком, кастетом, стальным прутом в штанине, гаечным ключом и т.п.