2015-01-08 3 views
0

Мне нужно принять электронную почту через SMTP, для этого решили использовать SMTPD Lib в Python. Есть класс SMTPChannel - можно ли добавить метод в этот класс? Мне скорее не нужно его расширять, а делать то, что мой метод будет там при загрузке ...Как добавить пользовательский метод в класс Python?

+2

Для довольно подробного обсуждения этой и связанных тем (например, добавление метода к экземпляру объекта) см. Эту публикацию SO: http://stackoverflow.com/questions/972/adding-a-method-to-an -existing-object – zehnpaard

ответ

3

Вы можете динамически добавлять участников во что-либо во время выполнения, включая методы. Вам просто нужно определить метод как функцию отдельно, а затем увеличить тип с помощью метода:

def someMethod (self): 
    # do something with self 

SMTPChannel.someMethod = someMethod 

Затем все объекты типа SMTPChannel будут иметь доступ к этому методу.

Обратите внимание, что выполнение этого не будет работать с именем mangling Python для членов, начинающихся с двух символов подчеркивания. Таким образом, вы ничего не можете сделать, вы не можете сделать с объектом SMTPChannel от «снаружи».

+0

Когда этот питон говорит ': экземпляр SMTPChannel не имеет атрибута '__greeting''. Это attr действительно существует в классе. – user1692333

+0

@ user1692333 Вот что я имел в виду в последнем абзаце. – poke

+0

ой, извините, как-то пропустил thi ... – user1692333

Смежные вопросы