Próba wyjaśnienia co to jest klasa, obiekt, atrybuty w Pythonie
To jest „przedruk” mojej wypowiedzi na polskim forum Pythona.
http://pl.python.org/forum/index.php?topic=3764.msg19009#msg19009
Może trochę przesadze w opisie ale jak przeczytałem o kaczuszkach i samochodzikach to przyszło mi do głowy:
Idź do IKEA, kup taboret do skręcenia a jak w domu go rozpakujesz to
znajdziesz tam instrukcje "jak skręcić taboret" i to jest klasa
-
przepis na taboret. Bardziej od sposobu skręcania taboretu jest tu
istotne jak on ma docelowo wyglądać - ile ma mieć nóg, jakie ma mieć
wymiary, ile śrubek itd. - i to są jego atrybuty
.
class PrzepisNaTaboret(object):
# atrybuty taboretu
ilosc_nog = 4
ilosc_srubek = 100
dlugosc_nogi = 50
szerokosc_siedzenia = 50
glebokosc_siedzenia = 50
Oczywiście sama instrukcja jest mało przydatna bo trudno na niej
posadzić gości. Tak więc mając instrukcje należy skręcić kilka taboretów
(pomińmy zdobywanie drewna na taborety). I taki fizyczny taboret to
będzie już obiekt
lub inaczej instancja klasy PrzepisNaTabore
(czyli fizyczny przedstawiciel stworzony za pomocą instrukcji
PrzepisNaTabore).
Tak więc korzystając z naszej instrukcji skręcamy pierwszy fizyczny taboret
pierwszy_taboret = PrzepisNaTaboret()
Jak wspomniałem wcześniej materiał nie stanowi problemu więc skręcamy więcej taboretów.
drugi_taboret = PrzepisNaTaboret()
trzeci_taboret = PrzepisNaTaboret()
Niestety przy pierwszym taborecie użyliśmy więcej śrubek (105) więc w ostatnim ich nam zabrakło i użyliśmy tylko 95
pierwszy_taboret.ilosc_srubek = 105
trzeci_taboret.ilosc_srubek = 95
Przychodzą goście widzą taborety i chcieli by czegoś się o nich dowiedzieć - jakie mają wymiary, ile śrubek potrzeba do ich skręcenia.
print pierwszy_taboret.ilosc_srubek # 105
print pierwszy_taboret.szerokosc_siedzenia # 50
print drugi_taboret.ilosc_srubek # 100
print drugi_taboret.szerokosc_siedzenia # 50
print trzeci_taboret.ilosc_srubek # 95
print trzeci_taboret.szerokosc_siedzenia # 50
Taborety to jednak niewygodne meble - przydały by się krzesła z oparciem. Aby jednak nie wymyślać wszystkiego od początku, zkserujemy instrukcje taboretu, i tylko dorysowujemy oparcie i nazywiemy to "Przepis Na Krzesło na podstawie Przepisu Na Taboret". W ten sposób krzesło odziedziczyło wszelkie cechy taboretu i dodatkowo dostało oparcie. I tu mamy dziedziczenie klas.
class PrzepisNaKrzeslo(PrzepisNaTaboret):
posiada_oparcie = 'tak'
Nie trzeba pisać, że krzesło ma 4 nogi i jakie ma wymiary bo to wszystko przejęło (odziedziczyło) od taboretu.
wygodne_kreslo = PrzepisNaKrzeslo()
print wygodne_krzeslo.ilosc_nog # 4
print wygodne_krzeslo.posiada_oparcie # 'tak'
Nie możemy jednak sprawdzić czy taboret ma oparcie bo wcześniej nikt nie pomyślał aby o tym umieścić informacje w jego instrukcji
print pierwszy_taboret.posiada_oparcie # ERROR
Teraz możemy co najwyżej do każdego taboretu z osobna przypisać taką informację
pierwszy_taboret.posiada_oparcie = 'nie'
drugi_taboret.posiada_oparcie = 'nie'
trzeci_taboret.posiada_oparcie = 'nie'
::::python
print pierwszy_taboret.posiada_oparcie # 'nie'
itd.
W ten sposób można by to dalej rozbudowywać ...
Buy a Coffee