Temat 7: Programowanie obiektowe (II)

Wstecz; Ostatnia modyfikacja: 16.03.2015
  • Ćwiczenie 1: (a) rozbuduj klasy z poprzednich zajęć; (b) zaprojektuj i zaimplementuj klasę Zoo. (dokończenie poprzednich ćwiczeń).
  • W Pythonie nie ma klasycznego rozróżnienia na atrybuty i metody publicznie / prywatne; istnieje natomiast pewna sensowna konwencja (przetestować):
    • a - (bez podkreślenia) atrybut dostępny publicznie
    • _a - jedno podkreślenie sugeruje, że jest to atrybut prywatny i nie należy się do niego odwoływać z zewnątrz klasy
    • __a - dwa podkreślenia, generalnie oznaczają atrybut prywatny, ale jak ktoś bardzo chce to i tak się dostanie pisząc: _A__a.
    • __str__ - dwa podkreślenia z obu stron oznaczają, że dana funkcja jest specjalna i powinna być wywoływana jedynie przez interpreter, a nie przez programistę.
  • Lista funkcji specjalnych w języku Python.
  • Przykład klasy Wektor ze strony: http://brain.fuw.edu.pl/edu/TI:Wst%C4%99p_do_programowania_obiektowego
  • # -*- coding: utf-8 -*-
    class Wektor(object):
        """Dwuwymiarowy wektor."""
     
        _ile_nas = 0
     
        def __init__(self, a, b):
            self.a = a
            self.b = b
            Wektor._ile_nas += 1
     
        def dlugosc(self):
            """Zwraca liczbę, długość Wektora."""
            return (self.a**2 + self.b**2)**0.5
     
        def obroc(self):
            """Odwraca wektor w miejscu, czyli zamienia
               wartości jego współrzędnych na przeciwne."""
            self.a *= -1
            self.b *= -1
     
        def obrocony(self):
            """Zwraca nowy wektor odwrócony."""
            return Wektor(-self.a, -self.b)
     
        def __str__(self):
            """Zwraca reprezentację Wektora w formie (x, y)"""
            return "(" + str(self.a) + ", " + str(self.b) + ")"
     
        def __repr__(self):
            """Zwraca reprezentacje Wektora w formie """
            return "".format(self.__str__(), id(self))
     
        def __add__(self, other):
            """Zwraca nowy Wektor będący sumą self i other."""
            print "dodawanie", self, other
            return Wektor(self.a + other.a,
                          self.b + other.b)
     
        def dodawanie(self, other):
            """Zwraca nowy Wektor będący sumą self i other."""
            print "dodawanie'", self, other
            return Wektor(self.a + other.a,
                          self.b + other.b)
     
        def __mul__(self, other):
            """Zwraca liczbę będącą iloczynem skalarnym self i other."""
            print "mnozenie", self, other
            return self.a * other.a + self.b * other.b
     
        def __del__(self):
            Wektor._ile_nas -= 1
    
  • Ćwiczenie 2: Zdefiniuj klasę opisującą datę. Zastanów się nad wyborem wewnętrznej reprezentacji dat. Zdefiniuj metody: (i) wyświetlania daty, (ii) przesuwania o jeden dzień w przód lub w tył, (iii) liczenia różnicy w dniach pomiędzy datami, (iv) wypisywania nazwy dnia tygodnia (Monday, Tuesday, ...) dla danej daty.
  • Kod z ćwiczeń