Мурастоо жана 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 ди карап, аны колдонду. Ушул жогору карай издөө — мурастоонун негизи.