NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 2 - První objektová aplikace v Pythonu - Hello object world

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Filip Stupka
Tvůrce
Avatar
Odpovídá na Veronika Paulikova
Filip Stupka:4.6.2023 16:01

Do metody format postupně vkládáme v podobě parametrů údaje, které chceme zobrazit. Ty jsou oindexované číslicemi 0, 1, 2..., podle toho, kolik jich zadáme. Zde máme dva parametry self.text (0) a jmeno (1). {0} a {1} se odkazují na tyto hodnoty a při provádění kódu jsou těmito hodnotami nahrazeny. proto pokud máme

return "{0} {1}!".format(self.text, jmeno)

a

zdravic.text = "Ahoj"
zdravic.jmeno = "Karle"

dostaneme jako výsledek Ahoj Karle!

 
Odpovědět
4.6.2023 16:01
Avatar
Filip Stupka
Tvůrce
Avatar
Filip Stupka:4.6.2023 16:05

Není tady dobře vysvětlené použití metody help(). Jeho funkčnost pravděpodobně závisí na místě uložení souboru, ale ani to nebylo explicitně zadáno

 
Odpovědět
4.6.2023 16:05
Avatar
Erika Piesch
Člen
Avatar
Odpovídá na Aneta Krejčová
Erika Piesch:20.6.2023 9:28

Ahoj , help napiš do konzole, klidně hned pod projekt a pojmenuj ho podle toho, jak mas nazvany ten file, muj se jmenuje priklady:

class Zdravic:
    """třída reprezentuje zdravič, který slouží ke zdravení uživatelů."""
    def pozdrav(self, jmeno):
        """ Vrátí pozdrav uživatele s nastaveným textem a jeho jménem."""
        return "{0} {1}!" .format(self.text,jmeno)
zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
print(zdravic.pozdrav("Karel"))
print(zdravic.pozdrav("Petr"))
zdravic.text = "Vítám tě tu programátore"
print(zdravic.pozdrav("Richard"))

import priklady
help(priklady)
 
Odpovědět
20.6.2023 9:28
Avatar
Erika Piesch
Člen
Avatar
Odpovídá na Aneta Krejčová
Erika Piesch:20.6.2023 9:30

tohle ti to vypise:

CLASSES
    builtins.object
        Zdravic

    class Zdravic(builtins.object)
     |  třída reprezentuje zdravič, který slouží ke zdravení uživatelů.
     |
     |  Methods defined here:
     |
     |  pozdrav(self, jmeno)
     |      Vrátí pozdrav uživatele s nastaveným textem a jeho jménem.
     |
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |
     |  __dict__
     |      dictionary for instance variables (if defined)
     |
     |  __weakref__
     |      list of weak references to the object (if defined)

DATA
    zdravic = <priklady.Zdravic object>

FILE
    /Users/erikapiesch/PycharmProjects/priklady.py
 
Odpovědět
20.6.2023 9:30
Avatar
Hana Svobodová:28.6.2023 10:47

Z vysvětlení mi není jasné, proč nemůžu místo parametru self rovnou použít text, a kdy a proč následně použiju zápis s rovná se a kdy s uvozovkami.

 
Odpovědět
28.6.2023 10:47
Avatar
Hana Svobodová:28.6.2023 10:56

Jako začátečníkovi mi chybí vysvětlení, proč nemůžu dát místo self rovnou text, a proč jednou pak píšu rovná se (zdravic.text = "Ahoj uživateli") a podruhé jsou závorky (zdravic.pozdrav("Ka­rel")).

 
Odpovědět
28.6.2023 10:56
Avatar
Odpovídá na Hana Svobodová
Michal Salvet:10.7.2023 15:55

Urcite muzes ale potom ten text bude porad stejny, coz asi nechces. Podle popisku jsem pochopil ze tohle je jen nejak berlicka a pozdeji se to resi jinak. Kazdopadne je aspon zajimave vedet, ze to tak jde.
V prvnim pripade si to predstav jako promennou ktere prirazujes nejake value.
V druhem pripade uz to value je v te funkci kterou volas s nejakym parametrem. Takze mas objekt zdravic (kteremu si priradil promennou) pak pomoci metody pozdrav (vpodstate funkce) zavolas funkci do ktere vlozis Karel coz je vyzadovany parametr pro tu funkci a ty jsou vzdy v zavorkach..

 
Odpovědět
10.7.2023 15:55
Avatar
Tamara Nečasová:11.7.2023 12:10

Na začátečníka jsou tu pro mě málo vysvětlené jednotlivé kroky (např. self.text) a příkaz help() jsem nebyla schopna spustit, možná bych ocenila polopatější vysvětlení, ale je možné, že víc polopatě už to nejde

 
Odpovědět
11.7.2023 12:10
Avatar
CamlostCZ
Člen
Avatar
Odpovídá na Tamara Nečasová
CamlostCZ:11.7.2023 16:20

K parametru self - pokud by nevadilo, že je to anglicky (psal jsem to pro anglicky mluvícího tazatele):

Without OOP
Imagine you want to make a module to ease your work with a data structure, for example a button - without classes.

You would choose a suitable container for the data, a dictionary probably as it allows for named properties:
title: string as the text displayed to the user
left: int as the x coordinate
top: int as the y coordinate
event_handlers: list of functions to call on certain events

Then, you would make a set of functions which would work with this data structure.
Usually, you want to draw a button:

def button_draw(button, canvas):
    # just draw a button on the canvas somehow

You want to handle events:

def button_handle_event(button, event):
    # loop through the registered event handlers
    # if found a handler for this event, call it

So you need to register event handlers:

def button_add_event_handler(button, event, handler):
    button["handlers"][event] += handler

And so on.

As you can see, all the functions take a common parameter, button, to be able to operate on different buttons as you create them in your applications.
Of course, you might find useful to define a function to create a button as well:

def button_create(title, left, top):
    result = {}
    result["title"] = title
    result["left"] = left
    result["top"] = top
    result["handlers"] = []
    return result

All these functions could ease your work with buttons. Unfortunately, as the author of these library functions, you can't guarantee the data passed to your functions are correct - they might be missing a member, for example the button might be missing its left coordinate just because someone will not call the button_create() function but initializes the structure by hand.
What you can do is to define another function, button_is_ok(but­ton) which would check if the data structure has been initialized correctly. And you would have to call it from all of these functions to ensure they won't fail because of wrong data. Which would be quite slow. And it would be a boring job for you as a programmer as well.

Usage:

button_cancel = button_create("Cancel", 256, 256)
button_add_event_handler(button_cancel, "click_button", handle_button_onclick)

Path to OOP
You might note the above mentioned approach introduces a tight binding between a particular data structure and functions working with it. Such a binding defines a data type (range of values and a set of available operations).
What if there would be a way to express this binding in a more explicit way?

# Meta-code only
datatype Button:
    title: str
    left: int
    top: int

    def create(...)
    def add_event_handler(...)
    def draw(...)

Then, the data would be inseparably linked to the right set of functions. Usually, the create() method is called a constructor as it's used to construct new variables of the datatype.

In Python, this can be achieved with classes:

class Button:
    # Members are listed in the constructor, __init__()

    def __init__self(self, title, left, top):
        self.left = left
        self.top = top
        self.title = title
        self.handlers = []

    def add_event_handler(self, event, handler):
        self.handlers[event] += handler

    # And so on ...

As you can see, it's almost the same code. It's been just put inside a code block defined as a class, __init__() is a constructor, and the first parameter is not called button but self. In Python, you can call it as you like but self is used by convention.

Member functions of classes are called methods, usually.

Usage:

button = Button("Cancel", 256, 256)
button.add_event_handler("click_button", handle_button_onclick)

PS: Snad jsem při formátování nezanesl chyby. Předem se omlouvám, pokud ano.

 
Odpovědět
11.7.2023 16:20
Avatar
Michaela Dolan:13.8.2023 11:54

Také jsem vůbec nepochopila kam se zadává to help... a když jsem si stáhla vzor, byl příklad kalkulačky ve dvou souborech? Nějak nevím, kde jsem to prošvihla a nebo vynechala, ale kdy mám vytvořit nový soubor a na co konkrétně ? Nikde to není vysvětleno .... Na co se zadává nový soubor? Na třídu/metody/a­tributy nebo instance ? Já jsem začátečník a opravdu nevím jak se to dělá, bez toho aniž by to někdo vysvětlil.... :(

 
Odpovědět
13.8.2023 11:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 86.