• Członkowie 1 post
    6 sierpnia 2025 17:34

    Witam, mam taki kodzik :

    class Person:
        def __init__(self, name="noname", age=-1):
            self.name = name
            self.age = age
    
        def something(self):
            pass
    
    
    class Student(Person):
        def __init__(self, grade):
            super().__init__()
            self.grade = grade
    
        def __repr__(self):
            return "Student name: %s, age %s grade: %s" % (self.name, self.age, self.grade)
    
        def __str__(self):
            return "From str method of Student: name is %s, age is %s, grade %s" % (self.name, self.age,self.grade)
    
        def something(self):
            print("Student saying something")
    
    
    class Teacher(Person):
        def __init__(self, subject):
            super().__init__()
            self.Subject = subject
    
        def __repr__(self):
            return "Teacher name: %s, age %s grade: %s" % (self.name, self.age, self.Subject)
    
        def __str__(self):
            return "From str method of Teacher: name is %s, age is %s, Subject %s" % (self.name, self.age,self.Subject)
    
        def something(self):
            print("Teacher saying something")
    
    
    if __name__ == '__main__':
        s1 = Student(5)
        print(s1)
        print([s1])
        t1 = Teacher(5)
        print([t1])
    
    
    
        for x in (s1, t1): 
            x.something()
    

    chciałbym utworzyć kontener do którego mógłbym pushowac i usuwać elementy i przechodzić przez nie w jednym forze.
    chciałbym utworzyć np liste i za jej pomocą dodawać elementy np. list.push(Student()) lub list.append(Teacher)
    nie do końca znam składnie, proszę o pomoc

  • edit

    Nazwa tematu została zmieniona z kontenero obiektów które dziedziczą po wspólnej bazie.

  • 7 sierpnia 2025 19:29

    Dodawanie elementów do listy (oraz zmiana elementów) podczas iteracji jest bezpieczna - nie potrzebujesz do tego nowego obiektu:

    items = [1, 2, 3, 4, 5]
    
    for i in items:
        if i < 10:
            items.append(i + 10)
    

    Operacje na liście które zmieniają jej długość podczas iteracji uważane są za ryzykowne - zwłaszcza takie które ją skracają. Bezpieczniej jest wykonać wtedy kopię listy zawierającą tylko docelowe element:

    items = [1, 2, 3, 4, 5]
    new_items = [item for item in items if item % 2]
    

    Trudno mi sobie wyobrazić działanie listy która miałaby pozwolić ci usunąć elementy podczas iteracji i która w takim działaniu byłaby bezpieczna.

  • arrow_forward

    Temat został przeniesiony z Aplikacje webowe.