[python] Třídy, metody, argumenty

starenka . starenka0 na gmail.com
Pátek Únor 21 20:42:33 CET 2014


s tema argumentama u funkci se muzes obecne dost vyblbnout... (vizuj
http://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions)

napr.

starenka /tmp % cat meh.py
#!/usr/bin/env python
# coding=utf-8

def nejaka(prvni, druhej, treti):
    print prvni, druhej, treti

def dalsi(prvni, *args):
    print prvni, args

def este_jina(**kwargs):
    print kwargs

def vrat_tri():
    return 1, 2, 3

def vrat_dict():
    return dict(prvni=1, druhej=2, treti=3)

nejaka(*vrat_tri())
nejaka(*sorted(vrat_dict().values()))
nejaka(**vrat_dict())
dalsi(*vrat_tri())
este_jina(**vrat_dict())

starenka /tmp % python meh.py
1 2 3
1 2 3
1 2 3
1 (2, 3)
{'druhej': 2, 'prvni': 1, 'treti': 3}

mej se

s.

---
In Perl you shoot yourself in the foot, but nobody can understand how
you did it. Six months later, neither can you. | print
'aknerats'[::-1]


2014-02-21 20:25 GMT+01:00 Marcus Scalpere <xdlabacekm at seznam.cz>:
> Dne 21.2.2014 19:30, Petr Viktorin napsal(a):
>
>> 2014-02-21 18:52 GMT+01:00 Marcus Scalpere <xdlabacekm at seznam.cz>:
>>>
>>> Zdravím,
>>> můj dotaz je lepší asi předvést než vysvětlovat, takže:
>>>
>>> class pokus:
>>>      def __init__(self, vstup):
>>>          self.vstup = vstup
>>>
>>>      def nejaka_funkce(self):
>>>          return (self.rok + 9) % 28
>>>
>>>      def jina_funkce():
>>>          return ((self.nejaka_funkce - 1) * 11) % 30
>>>
>>> prvni = pokus(1845)
>>> print (prvni.jina_funkce())
>>>
>>> (Jen příklad, skutečnost je trochu složitější, ale i kdyby nebyla, chci
>>> na
>>> to přijít)
>>> Je jasný, že mi to vyhodí chybu, poskytuji argument a přitom žádný
>>> nepotřebuje. Takže moje otázka je - jak to provést, abych mohl ve třídě
>>> používat metody, které mají jako argument výsledek jiné funkce ve třídě?
>>> A
>>> zároveň abych neměl problém při volání? Je mi jasný, že to určitě nějak
>>> jde...a omluvte mě, na OOP stále koukám jak pavián na Rosettskou desku:/
>>
>> Je to celkem jednoduché: metody definuješ se "self", ale voláš bez
>> "self" (ten se doplní sám, z objektu na kterém tu metodu voláš):
>>
>> class pokus:
>>      def __init__(self, rok):
>>          self.rok = rok
>>
>>      def nejaka_funkce(self):
>>          return (self.rok + 9) % 28
>>
>>      def jina_funkce(self):
>>          return ((self.nejaka_funkce() - 1) * 11) % 30
>>
>> prvni = pokus(1845)
>> print (prvni.jina_funkce())
>> _______________________________________________
>> Python mailing list
>> python at py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>> Visit: http://www.py.cz
>>
> No jasně, čekal jsem, že to bude jen nějaká drobnost. Hned se cítím o něco
> dospělejší. Vše funguje jak má, děkuji mnohokráte!
>
> _______________________________________________
> Python mailing list
> python at py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz


Další informace o konferenci Python