Python dědění z více tříd – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Python dědění z více tříd – Python – Fórum – Programujte.comPython dědění z více tříd – Python – Fórum – Programujte.com

 

Jouker
~ Anonymní uživatel
22 příspěvků
1. 2. 2021   #1
-
0
-

Dobrý den,

 snažím se pochopit jak funguje dědění z více tříd. Napsal jsem si zde testovací třídy. U třídy FirstClassMutant mi všechno funguje, tak jak by mělo. Ale u SecondClassMutant přesně nevím, jak dostat atributy z jednotlivých tříd do třídy  SecondClassMutant  tak, abych s nimi mohl pracovat. Zkoušel jsem více možností, ale nepodařilo se mi to. Poslední jsme nechal zakomentované. Mohl by mi prosím někdo poradit? Je více možností jak toto řešit?


class Dog():

  def __init__(self, dog_name):

      self.dog_name = dog_name

class Cat():

  def __init__(self, cat_name):

    self.cat_name = cat_name

class Mouse():

  def __init__(self, mouse_name):

    self.mouse_name = mouse_name

class FirstClassMutant(Dog):

  def __init__(self, mutant_name, dog_name):

    super().__init__(dog_name) self.mutant_name = mutant_name

  def print_hi(self):

    print('I am from dog %s and my name is %s.' % (self.dog_name, self.mutant_name))

 

class SecondClassMutant(Dog, Cat, Mouse):

  def __init__(self, mutant, mutant_color, dog, cat, mouse):

    # super(Dog, self).__init__(dog_name=dog)

    # super(Cat, self).__init__(cat_name=cat)

    # super(Mouse, self).__init__(mouse_name=mouse)

    self.mutant_name = mutant

    self.mutant_color = mutant_color

  def print_hi(self):

    print('I am from %s, %s, %s and my name is %s %s' % (self.dog_name, self.cat_name, self.mouse_name,self.mutant_color, self.mutant_name, ))
 

// ok
first = FirstClassMutant('Gzz', 'Rex')

first.say_hello()
 

// ???

second = SecondClassMutant(mutant='Fzz',

                                                mutant_color='Red',

                                                dog_name='Rex',

                                                cat_name='Tom',

                                                mouse_name='Jerry')

second.print_hi()
 

Nahlásit jako SPAM
IP: 217.28.83.–
gna
~ Anonymní uživatel
1850 příspěvků
1. 2. 2021   #2
-
0
-

Fungování super je trochu zamotané a je potřeba, aby ty bázovky "spolupracovaly". 

class Dog():
  def __init__(self, dog_name, **kw):
    super(Dog, self).__init__(**kw)
    self.dog_name = dog_name

class Cat():
  def __init__(self, cat_name, **kw):
    super(Cat, self).__init__(**kw)
    self.cat_name = cat_name

class Mouse():
  def __init__(self, mouse_name, **kw):
    super(Mouse, self).__init__(**kw)
    self.mouse_name = mouse_name

class SecondClassMutant(Dog, Cat, Mouse):
  def __init__(self, mutant, mutant_color, dog, cat, mouse):
    super(SecondClassMutant, self).__init__(dog_name=dog, cat_name=cat, mouse_name=mouse)
    self.mutant_name = mutant
    self.mutant_color = mutant_color

Upřímně, já jsem vždycky všechny složitější případy vzdal. Nejjednodušší je nepoužít super. 

class SecondClassMutant(Dog, Cat, Mouse):
  def __init__(self, mutant, mutant_color, dog, cat, mouse):
    Dog.__init__(self, dog_name=dog)
    Cat.__init__(self, cat_name=cat)
    Mouse.__init__(self, mouse_name=mouse)
    self.mutant_name = mutant
    self.mutant_color = mutant_color
Nahlásit jako SPAM
IP: 213.211.51.–
Jouker
~ Anonymní uživatel
22 příspěvků
1. 2. 2021   #3
-
0
-

#2 gna
Dobrý den,

 děkuji za informace.

Nahlásit jako SPAM
IP: 217.28.83.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

OOP - Dedeni s vice tridama — založil Ruda

Více tříd — založil RePRO

Python více možností — založil Dominik

Dědění — založil Yety

Dědění — založil opoke

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý