Форум сайта python.su
0
К примеру, я хочу создать расширенный класс для управления строками:
class SuperString(str): def __init__(self, sourcestr): print(self) super().__init__(self, sourcestr.upper()) s = SuperString('mystring') print(s)
Отредактировано Space (Май 1, 2013 09:03:25)
Офлайн
88
class SuperString(str): def __new__(cls, arg): return super().__new__(cls, arg.upper())
Отредактировано Shaman (Май 1, 2013 10:24:02)
Офлайн
0
ShamanСпасибо, заработало.
Офлайн
253
SpaceА это так и есть. __init__ Это конструктор.
Смутило что __init__ везде упорно называют конструктором.
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
Офлайн
88
SpaceСначала при помощи статичного метода __new__ создается экземпляр объекта, а затем он инициализируется в __init__, если таковой определён. Следует иметь в виду, что часть базовых средств языка определена на низком уровне и может себя вести неожиданным образом.
Смутило что __init__ везде упорно называют конструктором.
Офлайн
43
нужно наследоваться от UserString
Офлайн
0
Спасибо, ребята!
Благодаря вам разобрался 
Офлайн