Spot on. You replace your "anemic way" with first-class functions and namespacing, it ends up being the same thing.
With currying, you do away with OO and parameter initialization altogether.
@curry
def SMTPSender(host, message):
...
emailSender = SMTPSender(host='localhost')
# partially evaluated fn with `host` fixed
emailSender(message=message)