Python - Polimorfism, *args & **kwargs, ORM

Till dagens föreläsning finns ingen presenation, nedan är den kod som skrevs på föreläsningen:

Polimorfism

App.py

from Course import Course
from CourseUG import CourseUG
from CourseUV import CourseUV
from CourseAF import CourseAF

class App:

    def __init__(self):
        self.courses = self.generate_courses()

    def generate_courses(self):
        courses = []
        courses.append(Course("DA100A", "Välkomstvecka"))
        courses.append(CourseUG("DA385A", "Examensarbete"))
        courses.append(CourseUV("DA361A", "OOP i Python"))
        courses.append(CourseAF("DA200A", "International studies"))
        return courses

    def get_grade_from_score(self, score):
        for course in self.courses:
            print(course.calc_grade(score))

    def print_courses(self):
        for course in self.courses:
            print(course)

a = App()
a.print_courses()
a.get_grade_from_score(80)

Course.py

class Course:

    def __init__(self, code, name, lang="sv", students=[], teachers=[]):
        self.code = code
        self.name = name
        self.language = lang
        self.students = students
        self.teachers = teachers

    def calc_grade(self, points):
        if points > 0:
            return "Kursen har lästs"
        else:
            return "Har ej läst kursen"

    def __str__(self):
        return "{}: {}".format(self.code, self.name)

CourseUG.py

from Course import Course

class CourseUG(Course):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def calc_grade(self, points):
        if points >= 50:
            return "G"
        else:
            return "U"

CourseUV

from Course import Course

class CourseUV(Course):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def calc_grade(self, points):
        if points < 50:
            return "U"
        elif points < 76:
            return "G"
        else:
            return "VG"

CourseAF

from Course import Course

class CourseAF(Course):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def calc_grade(self, points):
        if points < 50:
            return "F"
        elif points < 60:
            return "E"
        elif points < 70:
            return "D"
        elif points < 80:
            return "C"
        elif points < 90:
            return "B"
        else:
            return "A"

ORM

from peewee import *
from datetime import date

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db # This model uses the "people.db" database.


# Skapa databasen
db.create_tables([Person])

# Skapa användare
Person.create(name='Anton', birthday=date(1989, 10, 2))
Person.create(name='Johanna', birthday=date(1995, 7, 13))

# Skriv ut alla användare från vår databas
for person in Person.select():
    print(person.name)

*args & **kwargs

def test(*args, **kwargs):
    print("-Argument:")
    for arg in args:
        print(arg)

    print("- Key word Argument:")
    for name, value in kwargs.items():
        print("{}: {}".format(name, value))

test("Anton", "Tibblin", "Mau", "Malmö", course="OOP i Python")