Typ hodnoty uložené ve Třídě – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Typ hodnoty uložené ve Třídě – Python – Fórum – Programujte.comTyp hodnoty uložené ve Třídě – Python – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

asohok
~ Anonymní uživatel
1 příspěvek
22. 9. 2021   #1
-
0
-

Zdravím,

potřeboval bych poradit, jak deklarovat ve třídě typ jejích hodnot atributů.

Například budu mít třídu, ve které budu uchovávat nějaké hodnoty ( ku příkladu budu zde mít seznam intů ).

Objekt této třídy budu poté vytvářet takto:

newObject : MyClass[ int ] = MyClass()

Problém je právě v tom otypování. Nevím, jak do té třídy zavést, že se bude jednat o třídu, která uchovává hodnoty typu int a i tak se bude volat bez jediného argumentu.

( mypy mi hlásí tuto chybu : "MyClass" expects no type arguments, but 1 given )

Předem děkuji za jakoukoliv radu.

Nahlásit jako SPAM
IP: 78.45.144.–
gna
~ Anonymní uživatel
1498 příspěvků
22. 9. 2021   #2
-
0
-

Jestli jsou v té třídě prostě inty, tak ty otypuješ jako inty; a typ instance třídy pak bude jen ta třída. 

class IntClass:
    def __init__(self) -> None:
        self.values: list[int] = []
        
    def add(self, value: int) -> None:
        self.values.append(value)


inty = IntClass()
inty.add(3)    # ok
inty.add('a')  # err

Pokud je to generická třída, tak ji tak musíš definovat a pak můžeš určovat konkrétní typ. 

from typing import Generic, TypeVar

T = TypeVar('T')


class GenClass(Generic[T]):
    def __init__(self) -> None:
        self.values: list[T] = []
        
    def add(self, value: T) -> None:
        self.values.append(value)


genint = GenClass[int]()
genint.add(3)    # ok
genint.add('a')  # err

genstr = GenClass[str]()
genstr.add('a')  # ok
genstr.add(3)    # err
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1498 příspěvků
22. 9. 2021   #3
-
0
-

To přiřazení jsem teda napsal zjednodušeně, samozřejmě to můžeš rozepsat, tak ja to zkoušíš teď.

genint = GenClass[int]()
genint: GenClass[int] = GenClass()
genint: GenClass[int] = GenClass[int]()
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

×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, 19 hostů

 

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