Найти - Пользователи
Полная версия: Вопрос про наследование от базовых классов
Начало » Python для новичков » Вопрос про наследование от базовых классов
1
Space
К примеру, я хочу создать расширенный класс для управления строками:

class SuperString(str):
    def __init__(self, sourcestr):
        print(self)
        super().__init__(self, sourcestr.upper())
s = SuperString('mystring')
print(s)

Результатом выполнения будет:
>>> mystring
>>> mystring

Как видно конструктор не переопределился, но все же был кем-то вызван.

Как правильно переопределить базовый класс, чтобы конструктор был переопределен также?

UPDATE: Python 3
Shaman
class SuperString(str):
    def __new__(cls, arg):
        return super().__new__(cls, arg.upper())
Space
Shaman
Спасибо, заработало.
Смутило что __init__ везде упорно называют конструктором.
doza_and
Space
Смутило что __init__ везде упорно называют конструктором.
А это так и есть. __init__ Это конструктор.
http://habrahabr.ru/post/114585/
class Ts(object):
    def __init__(self,s):
        self.s=s
    def __str__(self):
        return self.s
class Tss(Ts):
    def __init__(self,s):
        super(Tss,self).__init__(s.upper())
a=Tss("asda")
>>> print a
ASDA
просто строка неизменяемый объект
Shaman
Space
Смутило что __init__ везде упорно называют конструктором.
Сначала при помощи статичного метода __new__ создается экземпляр объекта, а затем он инициализируется в __init__, если таковой определён. Следует иметь в виду, что часть базовых средств языка определена на низком уровне и может себя вести неожиданным образом.
sergeek
нужно наследоваться от UserString
Space
Спасибо, ребята!
Благодаря вам разобрался
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB