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ń