<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
Step1:  Funkce a třídy
Funkce
Následuje příklad definice funkce, která sečte dva argumenty - a, b.
Step2:  Funkce může být opakovaně použita kde sčítání různých argumentů (čísel, textu i listů)
Step4:  Poznámka
Step7:  Třídy
Třída je předpis, podle kterého je možné vytvářet instance - objekty. Příklad jednoduché třídy následuje.
Step8:  Instance objektu může být vytvořena následovně. Všimněte si, že po přespání refence na instanci, je instance hned zničena.
Step10:  Funkce del (destruktor) se většinou nepoužívá. Ale funkce init (konstruktor) je nejčastější způsob jak inicializovat proměnné nebo činnost instance. V následujícím příkladě má konstruktor instance dva argumenty, které se uloží tak, aby byly přístupné i ostatním funkcím v dané instanci.
Step11:  Následuje příklad jak předat argumenty konstruktoru a jak zavolat vytvořenou funkci dané instance.
Step12:  Dědičnost
Ukázka využíti dědičnosti následuje.
Step13:  Takto zděděné třídy mají všechny proměnné a funkce původní třídy Food.
<ASSISTANT_TASK:>
Python Code:
def my_function(a, b):
    
    This function sum together two variables (if they are summable).
    
    return a + b   
Explanation: Funkce a třídy
Funkce
Následuje příklad definice funkce, která sečte dva argumenty - a, b.
End of explanation
my_function(2, 5)
my_function("Spam ", "eggs")
my_function([1, 2, "A"], [5, 5.3])
Explanation: Funkce může být opakovaně použita kde sčítání různých argumentů (čísel, textu i listů)
End of explanation
def my_function(arg1, arg2, kwarg1=0, kwarg2=0):
    
    This function accepts two args and two kwargs.
    Product is sum of all args and kwargs
    
    return arg1 + arg2 + kwarg1 + kwarg2
my_function(2, 3., kwarg1=1.5, kwarg2=2)
my_function(2, 3., 1.5, 2.)
my_function(2, 3.)
my_function(2, 3., kwarg2=3.)
Explanation: Poznámka: Funkce nemusí mít žádné argumenty a nemusí ani mít příkaz return. Funce bez return vrací None.
Argumenty a klíčové argumenty
Argumenty (arguments, args) jsou povinné. Když voláte funkce, argumenty musí být zadané. Záleží na jejich pořadí.
Klíčové argumenty (keyword arguments, kwargs) jsou nepovinné, můžou mít zadanou defaultní hodnotu. Nezáleží na jejich pořadí.
Následuje příklad, kde jsou užity navíc i klíčové argumenty.
End of explanation
class Example():
    
    def __init__(self):
        
        This is constructor. This function runs during creation.
        
        print("Instance created.")
        
    def __del__(self):
        
        This is something like destructor.
        This function runs when the last pointer to the instance is lost.
        It is the last will of the instance.
        
        print("Instance deleted")       
Explanation: Třídy
Třída je předpis, podle kterého je možné vytvářet instance - objekty. Příklad jednoduché třídy následuje.
End of explanation
f = Example()
f = None
Explanation: Instance objektu může být vytvořena následovně. Všimněte si, že po přespání refence na instanci, je instance hned zničena.
End of explanation
class Food():
    
    def __init__(self, portion_size, unit_mass):
        self.portion_size = portion_size # make it accessible from outside
        self.unit_mass = unit_mass
        self.UNIT = "g"
    def get_portion_mass(self):
        
        This function returns mass of the portion with unit as string.
        
        return str(self.portion_size * self.unit_mass) + " " + self.UNIT    
Explanation: Funkce del (destruktor) se většinou nepoužívá. Ale funkce init (konstruktor) je nejčastější způsob jak inicializovat proměnné nebo činnost instance. V následujícím příkladě má konstruktor instance dva argumenty, které se uloží tak, aby byly přístupné i ostatním funkcím v dané instanci.
End of explanation
f = Food(10, 30) # create food with specific parameters
f.get_portion_mass() # get mass of a single portion
Explanation: Následuje příklad jak předat argumenty konstruktoru a jak zavolat vytvořenou funkci dané instance.
End of explanation
class Fruit(Food):
    
    def __init__(self, portion_size, unit_mass, sweetness=0):
        super(self.__class__, self).__init__(portion_size, unit_mass)
        self.sweetness = sweetness
        
class Vegetable(Food):
    
    def __init__(self, portion_size, unit_mass, is_green=False):
        super(self.__class__, self).__init__(portion_size, unit_mass)
        self.is_green = is_green
Explanation: Dědičnost
Ukázka využíti dědičnosti následuje.
End of explanation
apple = Fruit(10, 30, 50)
apple.sweetness
apple.get_portion_mass()
Explanation: Takto zděděné třídy mají všechny proměnné a funkce původní třídy Food.
End of explanation
<END_TASK>