Можно ли добавить метод в родной класс? - PullRequest
0 голосов
/ 09 мая 2019

Я нахожу удивительным, что в отличие от BASIC python не имеет методов .left, .right и .mid для строк.

Как указано в другом месте, достаточно просто написать функции для выполнения трюка, но можно добавить методык нативному классу?

Так что

a = "Spam" 
b = a.left(3)   
print(b)

выведет:

Spa

Ответы [ 2 ]

1 голос
/ 09 мая 2019
b = a[:3]

примет 3 первых символа строки

b = a[:15]

не сделает ошибку (не уверен на python2)

c = a[-3:]

для последних 3 символов

Но вы все равно можете переопределить (наследовать) строковый тип

class MySuperString(str):
    def left(self, num_char):
        return self[:num_char]

a = MySuperString('plop')
b = a.left(3)

, например, см. http://www.nomadiccodemonkey.com/?p=590

edit:

if isinstance(a, str):

не будетработать больше, используйте это вместо:

if issubclass(a, str):

или, естественно, это:

if isinstance(a, MySuperString):

шутка по-французски: et ça marche même si tu mets des SuperSlip!

0 голосов
/ 09 мая 2019

вы можете создать свою собственную функцию.

right = lambda str, index: str[-index:]
left = lambda str, index: str[:index]
a = "Spam"
print(left(a,3))
print(right(a,3))
...