I have the following program
class slt: __slots__ = () def getslots(self): print("### slots =", self.__slots__) if self.__slots__ == (): return [] else: ls = super().getslots() ls.extend(self.__slots__) return ls def __str__(self): ls = [] attrs = self.getslots() for attr in attrs: ls.append(str(getattr( self, attr))) return '->'.join(ls) class slt1 (slt): __slots__ = 'fld1', 'fld2' def __init__(self, vl1, vl2): self.fld1 = vl1 self.fld2 = vl2 class slt2(slt1): __slots__ = 'fld3', def __init__(self, vl1, vl2, vl3): self.fld1 = vl1 self.fld2 = vl2 self.fld3 = vl3 rc1 = slt1(4, 7) rc2 = slt2(11, 18, 29) print(rc1) print(rc2) When I call this I would expect to see the following: ### slots = ('fld1', 'fld2') ### slots = () 4->7 ### slots = (fld3,) ### slots = ('fld1', 'fld2') ### slots = () 11->18->29 What I actually get is: ### slots = ('fld1', 'fld2') Traceback (most recent call last): File "slottest", line 39, in <module> print(rc1) File "slottest", line 15, in __str__ attrs = self.getslots() File "slottest", line 9, in getslots ls = super().getslots() AttributeError: 'super' object has no attribute 'getslots' -- Antoon Pardon -- https://mail.python.org/mailman/listinfo/python-list