class MyStr(str):
Verfasst: Donnerstag 17. März 2022, 15:33
Hallo Zusammen,
ich will ein neues str Class erstellen, dabei soll es ein Slot für str Buffer aus Master Class verwenden.
z.B.: wenn ich ein List Class erstelle:
class MyList(list):
def __init__(self, iterable: iter):
super(MyList, self).__init__()
self.set(iterable)
def set(self, iterable: iter) -> 'GList':
super().__init__(iterable)
return self
t = MyList([1, 2, 3])
print(t) -> [1, 2, 3]
t.set([20, 30, 50])
print(t) -> [20, 30, 50]
Dann funktioniert es super, weil Masterclass list nutzt sein Slot in funktion list.__init__(), aber Masterclass str nutzt sein Slot in funktion str.__new__(), dass bedeutet, es aktualisiert nicht aktive Class, sondern es macht Return des neuen Classes.
mein Bsp. für str Class:
class MyStr(str):
def __new__(cls, *args, **kwargs):
self = super(GStr, cls).__new__(cls, args[0])
return self
def __init__(self, value):
super(MyStr, self).__init__()
self.set(value)
def set(self, value):
# was soll ich hier chreiben?
p = MyStr("Start")
print(p) -> "Start"
p.set("Change")
print(p) -> "Start", aber muss "Change" sein
ich will ein neues str Class erstellen, dabei soll es ein Slot für str Buffer aus Master Class verwenden.
z.B.: wenn ich ein List Class erstelle:
class MyList(list):
def __init__(self, iterable: iter):
super(MyList, self).__init__()
self.set(iterable)
def set(self, iterable: iter) -> 'GList':
super().__init__(iterable)
return self
t = MyList([1, 2, 3])
print(t) -> [1, 2, 3]
t.set([20, 30, 50])
print(t) -> [20, 30, 50]
Dann funktioniert es super, weil Masterclass list nutzt sein Slot in funktion list.__init__(), aber Masterclass str nutzt sein Slot in funktion str.__new__(), dass bedeutet, es aktualisiert nicht aktive Class, sondern es macht Return des neuen Classes.
mein Bsp. für str Class:
class MyStr(str):
def __new__(cls, *args, **kwargs):
self = super(GStr, cls).__new__(cls, args[0])
return self
def __init__(self, value):
super(MyStr, self).__init__()
self.set(value)
def set(self, value):
# was soll ich hier chreiben?
p = MyStr("Start")
print(p) -> "Start"
p.set("Change")
print(p) -> "Start", aber muss "Change" sein