Мазмунга өтүү

Объектке багытталган Python: мурастоо жана super()

Сабактын башталышы

Мурастоо жана super()

Жаңы класстарды нөлдөн эмес, бар класстардын үстүнө куруңуз

Негизги идея: Мурастоо жаңы класска бар класстын маалыматын жана жүрүм-турумун кайра колдонууга мүмкүнчүлүк берет. Бар класс — базалык (же ата-эне); жаңы класс — туунду (же бала) класс. Бала ата-энеде болгон баарын алат жана аны толуктай же өзгөртө алат. super() — бул баланын ата-энени үнсүз алмаштырбай, аны менен кызматташуу жолу.
Бул теманын аягында сиз:
  • class Child(Parent): аркылуу туунду класс жарыялап, is-a («болуп саналат») байланышын түшүндүрө аласыз,
  • ата-эненин __init__ ин (жана башка методдорун) super() аркылуу чакыра аласыз,
  • методту кайра аныктап, аны качан кеңейтип, качан алмаштырууну биле аласыз,
  • is-a же has-a белгиси боюнча мурастоо менен композициянын ортосунан тандай аласыз,
  • кичине класс иерархиясын окуп, кайсы метод аткарыларын алдын ала биле аласыз.

1. Базалык жана туунду класстар

Сиз __init__ жана методдору бар өзүнчө классты жазганды билесиз. Мурастоо эки класс көп жалпы жүрүм-турумду бөлүшкөндө жана аны эки жолу кайталагыңыз келбегенде керек. Айбандарды моделдеп жатыңыз дейли. Ар бир айбандын аты бар жана ал тамактана алат; бирок кээ бирлери гана үрө алат. Ат менен тамактануу кодун Dog, Cat жана Bird ичинде кайталабай, жалпы бөлүктөрдү бир базалык класска салып, ар бир конкреттүү айбанга андан мурас алууга уруксат бересиз.

Мурастоону текшерүү — бул is-a («болуп саналат») байланышы: Dog — Animal, SavingsAccount — BankAccount. Эгер мындай сүйлөм туура угулса, мурастоо — талапкер. Эгер сиз has-a («ээ») деп айтмаксыз, мисалы Car Engine ге ээ, — бул композиция, ал жөнүндө 6-бөлүмдө.

class Animal:            # base / parent class
    def __init__(self, name):
        self.name = name

    def eat(self):
        return self.name + " is eating"

class Dog(Animal):      # derived / child class -- Dog IS-A Animal
    def bark(self):
        return "Woof!"

d = Dog("Rex")
print(d.eat())          # inherited from Animal
print(d.bark())         # defined on Dog

Жыйынтык:

Rex is eating
Woof!

Байкаңыз: Dog эч жерде __init__ же eat жарыялабайт, бирок d.eat() иштейт. Python eat ти Dog тон таппай, ата-эне Animal ди карап, аны колдонду. Ушул жогору карай издөө — мурастоонун негизи.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө