Python - OOP med Python (2)

HT19 - DA361A - OOP med Python (2) from Anton Tibblin

Dagens exempel

Ex.1 Arv

Person.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person:

    def __init__(self, name, age, user_id):
        self.__name = name
        self.__age = age
        self.__user_id = user_id

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_age(self):
        return self.__age

    def __str__(self):
        return "{} ({})".format(self.__name, self.__age)
    

Student.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Person import Person

class Student(Person):

    def __init__(self, name, age, user_id, program):
        self.program = program
        super().__init__(name, age, user_id)

    def __str__(self):
        return "Student: {} ({})".format(self.get_name(), self.get_age())


s = Student("Anna Andersson", 22, "abc123", "Informationsarkitekt")
print(s)

Lecturer.py

1
2
3
4
5
6
7
8
9
10
11
from Person import Person

class Lecturer(Person):

    def __init__(self, name, age, user_id, courses):
        self.courses = courses
        super().__init__(name, age, user_id)

l = Lecturer("Anton", 29, "abc123", ["OOP"])

print(l)

Ex. 2 Filmsamling

Klassdiagram

Klassdiagram

Main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from User import User
from Movie import Movie
from Actor import Actor

class Main:

    def __init__(self):
        self.user = self.create_user()

    def create_user(self):
        user_name = input("Namn: ")
        user_age = input("Ålder: ")
        return User(user_name, user_age)

    def start(self):
        print("Välkommen {}".format(self.user.name))
        self.menu()

    def menu(self):
        while True:
            self.print_menu()
            user_choice = input("Val: ")
            if user_choice == "1":
                self.show_movies()
            elif user_choice == "2":
                self.create_movie()
            elif user_choice == "3":
                pass
            elif user_choice == "4":
                pass
            elif user_choice == "0":
                break
            else:
                print("Du har valt ett alternativ som inte finns, försök igen.")

        print("Hejdå!")        

    def print_menu(self):
        print("--- Meny")
        print("1) Visa filmer")
        print("2) Lägg till en film")
        print("3) Radera en film")
        print("4) Redigera en film")
        print("0) Avsluta")
        print("")

    def show_movies(self):
        for movie in self.user.movie_collection.movies:
            print(movie)

    def create_movie(self):
        print("--- Skapa en film")
        title = input("Titel: ")
        year = input("Year: ")

        actors = []

        new_actor = input("Namn på skådespelare (lämna blank för att gå vidare): ")
        while new_actor != "":
            found_actor = False
            for m_actor in self.user.movie_collection.actors:
                if m_actor.name == new_actor:
                    actors.append(m_actor)
                    found_actor = True
            
            if found_actor == False:
                print("Skådespelaren finns inte, ska den!")
                new_actor_name = input("Skådespelarens namn: ")
                new_actor_age = input("Skådespelarens ålder: ")
                new_actor_instance = Actor(new_actor_name, new_actor_age)
                self.user.movie_collection.add_actor(new_actor_instance)
                actors.append(new_actor_instance)

            new_actor = input("Namn på skådespelare (lämna blank för att gå vidare): ")

        new_movie = Movie(title, year, actors, None)

        self.user.movie_collection.add_movie(new_movie)

program = Main()
program.start()

MovieCollection.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MovieCollection:

    def __init__(self):
        self.movies = []
        self.actors = []
        self.directors = []

    def add_movie(self, movie):
        self.movies.append(movie)

    def add_actor(self, actor):
        self.actors.append(actor)

    def remove_move(self, movie):
        pass

Movie.py

1
2
3
4
5
6
7
8
9
10
11
12
13
class Movie:

    def __init__(self, title, year, actors, director):
        self.title = title
        self.year = year
        self.actors = actors
        self.director = director

    def __str__(self):
        actor_names = []
        for actor in self.actors:
            actor_names.append(actor.name)
        return "{} ({}): {}".format(self.title, self.year, ", ".join(actor_names))

Person.py

1
2
3
4
5
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

User.py

1
2
3
4
5
6
7
8
from Person import Person
from MovieCollection import MovieCollection

class User(Person):

    def __init__(self, name, age):
        self.movie_collection = MovieCollection()
        super().__init__(name, age)