Ваш код абсолютно рабочий и нет разницы передавать туда класс или экземпляр класса - django сама разбирается что вы ей передали. В качестве подтверждения аналогичности код:
class foo(forms.Form):
password = forms.CharField(max_length=10, widget=forms.PasswordInput())
class bar(forms.Form):
password = forms.CharField(max_length=10, widget=forms.PasswordInput)
print(foo())
print(bar())
выведет
<tr><th><label for="id_password">Password:</label></th><td><input id="id_password" maxlength="10" name="password" type="password" /></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><input id="id_password" maxlength="10" name="password" type="password" /></td></tr>
Как видите результат абсолютно идентичный. Покажите как вы выводите форму в шаблоне - скорее всего проблема именно в этом.