Jak rozdělit metody tříd do souborů v Pythonu 3 – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak rozdělit metody tříd do souborů v Pythonu 3 – Python – Fórum – Programujte.comJak rozdělit metody tříd do souborů v Pythonu 3 – Python – Fórum – Programujte.com

 

marek9
~ Anonymní uživatel
8 příspěvků
17. 3. 2023   #1
-
0
-

Ahoj, chodí sem nějaký opravdový profík na Python který by dokázal poradit jak tuhle třídu rozdělit do více souborů (každá metoda v samostatném souboru) tak aby se zachovala přesně taková datová struktura (v každém z tech souborů) včetně volání těch metod?

class class_a:
	def metoda_a():
		print('class_a.metoda_a()')
		class_a.class_b.metoda_b()
		class_a.class_b.class_c.metoda_c()
	def metoda_e():
		print('class_a.metoda_e()')
	class class_b:
		def metoda_b():
			print('class_a.class_b.metoda_b()')
		class class_c:
			def metoda_c():
				print('class_a.class_b.class_c.metoda_c()')
				class_a.class_b.class_c.class_d.metoda_d()
			class class_d:
				def metoda_d():
					print('class_a.class_b.class_c.class_d.metoda_d()')
					class_a.metoda_e()

class_a.metoda_a()
Nahlásit jako SPAM
IP: 46.23.142.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 3. 2023   #2
-
0
-

Napiš, co je původní záměr a vymyslíme řešení, které není takový nesmysl.

Nahlásit jako SPAM
IP: 213.211.51.–
marek9
~ Anonymní uživatel
8 příspěvků
17. 3. 2023   #3
-
0
-

#2 gna
Nevíš, tak to neřešeš.

Nahlásit jako SPAM
IP: 46.23.142.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 3. 2023   #4
-
0
-

#3 marek9
Vím, ale je extrémně nepravděpodobné, že bys to opravdu potřeboval.

Nahlásit jako SPAM
IP: 213.211.51.–
marek9
~ Anonymní uživatel
8 příspěvků
17. 3. 2023   #5
-
0
-

#4 gna
Vím, že je to složité udělat, klidně ustoupím i od těch class a nechám jen funkce, ale to ostatní musí zůstat zachované. Tak pokud víš, budu rád za radu. 

Nahlásit jako SPAM
IP: 46.23.142.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 3. 2023   #6
-
0
-

   

class AA:
    ...

class AB:
    ...

class AC:
    ...

class A(AA, AB, AC):
    ...
Nahlásit jako SPAM
IP: 213.211.51.–
marek9
~ Anonymní uživatel
8 příspěvků
17. 3. 2023   #7
-
0
-

#6 gna
Tohle nebudu ani komentovat..

Nahlásit jako SPAM
IP: 46.23.142.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 3. 2023   #8
-
0
-

#7 marek9
To je nejjednodušší způsob, jak docílit toho, co jsi popsal. Samozřejmě to ještě rozhodíš do samostatných souborů a propojíš importama, ale to bys musel aspoň trochu vědět, co děláš...

Nahlásit jako SPAM
IP: 213.211.51.–
marek9
~ Anonymní uživatel
8 příspěvků
18. 3. 2023   #9
-
0
-

#8 gna
Přečti si dotaz ještě jednou a líp ;) 

Nahlásit jako SPAM
IP: 46.23.142.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 3. 2023   #10
-
0
-

Tak popiš, jak si představuješ ten rozložený výsledek a já ti napíšu, jak ho složit dohromady.

Nahlásit jako SPAM
IP: 213.211.51.–
JerryM0
Věrný člen
18. 3. 2023   #11
-
0
-

:)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:2c70:f6ef:19e2:2545...–
JerryM0
Věrný člen
18. 3. 2023   #12
-
0
-

...já to taky okomentuju :) i když nejsem Python programátor :)

...tak podle mě kdyby tohle bylo v C++ tak je to buď totální nesmysl a autor si jenom hrál nebo je tam nějaký "velmi" skrytý záměr ... takže teď zase něco řekni ty :)

jinak rozdělit se to samozřejmě dá pomocí virtuálních metod a dědění na 4 samostatné třídy:

https://stackoverflow.com/questions/4714136/how-to-implement-virtual-methods-in-python

nebo to co psal gna v #6 ,, atd,,,

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:2c70:f6ef:19e2:2545...–
Kit+15
Guru
18. 3. 2023   #13
-
0
-

#1 marek9
Jde to udělat poměrně snadno s použitím kompozice. Třídy se napíší pod sebe (klidně do více souborů), vytvoří se vnitřní instance, ta se vloží jako parametr nadřízené instance a ta se vloží jako parametr hlavní instance.

Nahlásit jako SPAM
IP: 195.113.155.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
marek9
~ Anonymní uživatel
8 příspěvků
18. 3. 2023   #14
-
0
-

#13 Kit
V takovém případě nebude možné používat požadované volání metod  

class_a.class_b.class_c.class_d.metoda_d()
Nahlásit jako SPAM
IP: 46.23.142.–
Kit+15
Guru
18. 3. 2023   #15
-
0
-

#14 marek9
Neboj se, bude to fungovat.

Nahlásit jako SPAM
IP: 195.113.155.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
marek9
~ Anonymní uživatel
8 příspěvků
18. 3. 2023   #16
-
0
-

#12 JerryM
Ano, je tam skrytý záměr, proto trvám na tom, že každá metoda musí být v samostatném souboru a volání metod musí být ve tvaru jak jsem psal v dotazu.

Nahlásit jako SPAM
IP: 46.23.142.–
marek9
~ Anonymní uživatel
8 příspěvků
18. 3. 2023   #17
-
0
-

#14 marek9
Fungovat to třeba bude, ale v zadání bylo volat metody

class_a.class_b.class_c.class_d.metoda_d()

což v tomto případě nebude, jelikož bude volání metod začínat self.

Nahlásit jako SPAM
IP: 46.23.142.–
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é

 

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