Реализация пользовательского метода строки - PullRequest
8 голосов
/ 23 декабря 2010

Как добавить пользовательский метод во встроенный тип данных Python? Например, я хотел бы реализовать одно из решений этого вопроса , но иметь возможность назвать его следующим образом:

>>> s = "A   string  with extra   whitespace"
>>> print s.strip_inner()
>>> A string with extra whitespace

Итак, как бы мне определить пользовательский .strip_inner() строковый метод?

Ответы [ 3 ]

6 голосов
/ 23 декабря 2010

Вы не можете.И вам не нужно.

См. Расширение встроенных классов в Python для альтернативного решения.Подклассы - это путь сюда.

2 голосов
/ 23 декабря 2010

Встроенные классы, такие как str, реализованы в C, поэтому вы не можете ими управлять.Вместо этого вы можете расширить класс str:

>>> class my_str(str):
...     def strip_inner(self):
...         return re.sub(r'\s{2,}', ' ', s)
... 
>>> s = my_str("A   string  with extra   whitespace")
>>> print s.strip_inner()
A string with extra whitespace
1 голос
/ 23 декабря 2010

Вы не можете добавлять методы во встроенные классы. Но что не так с использованием функций? strip_inner(s) просто отлично и питонично.

Если вам нужен полиморфизм, просто используйте if isinstance(obj, type_), чтобы определить, что делать, или для чего-то более расширяемого, используйте универсальный пакет функций, такой как PEAK-Rules .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...