4. OOP Advanced

4.1. Inheritance Method Resolution

4.1.1. Method Resolution Order

Listing 4.1. Method Resolution Order
class A:
    def show(self):
        print('a')

class B:
    def show(self):
        print('b')

class C:
    def show(self):
        print('c')

class D(A, B, C):
    pass


obj = D()

obj.show()
# a

print(D.__mro__)
# (<class '__main__.D'>,
#  <class '__main__.A'>,
#  <class '__main__.B'>,
#  <class '__main__.C'>,
#  <class 'object'>)

4.1.2. Inheritance Diamond

../_images/inheritance-diamond-1.jpg

Figure 4.4. Inheritance Diamond

../_images/inheritance-diamond-2.jpg

Figure 4.5. Inheritance Diamond

Listing 4.2. Inheritance Diamond
class A:
    def show(self):
        print('a')


class B(A):
    def show(self):
        print('b')


class C(A):
    def show(self):
        print('c')


class D(B, C):
    pass


obj = D()

obj.show()
# b

print(D.__mro__)
# (<class '__main__.D'>,
#  <class '__main__.B'>,
#  <class '__main__.C'>,
#  <class '__main__.A'>,
#  <class 'object'>)

4.2. Assignments

4.2.1. Dragon (Part 3)

  • Filename: oop_dragon_3.py

  • Lines of code to write: 50 lines

  • Estimated time of completion: 30 min

../_images/dragon.gif

Figure 4.6. Firkraag dragon from game Baldur’s Gate II: Shadows of Amn

  1. Dodaj możliwość poruszania się smoka i bohatera w 3 wymiarach

  2. Bohater może należeć do drużyny, który może składać się maks z 6 postaci (różnych klas)

  3. Żadna z istot na planszy nie może wyjść poza zakres ekranu

  4. Bohater może dodatkowo założyć ekwipunek i może być to wiele obiektów na raz

  5. Każdy z przedmiotów ma swoją nazwę, typ oraz modyfikator

    • zbroję (dodatkowe punkty obrony, np. +10%)

    • tarczę (dodatkowe punkty obrony, np. +5%)

    • miecz (dodatkowe punkty ataku, np. +5%)

  6. Zbroja i tarcza chroni przed uderzeniami obniżając ilość obrażeń o wartość obrony

  7. Miecz zwiększa ilość zadawanych obrażeń

  8. Obrażenia smoka maleją z sześcianem odległości (zianie ogniem)

  9. Bohater nie może zadawać obrażeń jak jest dalej niż 50 punktów od przeciwnika

  10. Wszystkie istoty mogą levelować a bazowe punty życia i obrażeń się zmieniają z poziomem

  11. Przeprowadź symulację walki. Kto zginie pierwszy?